在 JavaScript 中, 迭代器 表示一系列值。 它是一个具有 next()
返回具有两个属性的 POJO 的函数:
value
:序列中的下一个值。done
:如果 为真 ,则表示序列已完成。
例如,下面的对象是一个表示偶数序列的迭代器。
let num = 0;
const iterator = {
next: () => {
num += 2;
return { value: num, done: false };
}
};
迭代器和可迭代对象
迭代器本身通常没有用。 相反,在 JavaScript 中,您通常使用可迭代对象。 可 迭代 对象是具有 Symbol.iterator
返回迭代器的函数。 你可以想到一个可迭代的 Symbol.iterator
作为迭代器的工厂函数。
const iterable = {
[Symbol.iterator]: function factory() {
let num = 0;
const iterator = {
next: () => {
num += 2;
return { value: num, done: false };
}
};
return iterator;
}
};
Iterables 可以很好地与多种 JavaScript 语言结构和内置函数配合使用。
例如,您可以使用 for/of
环形。
const oneThruTen = {
[Symbol.iterator]: function() {
let num = 0;
return { next: () => ({ value: ++num, done: num > 10 }) }
}
};
for (const num of oneThruTen) {
num; // 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
}
请注意 不能 使用 您 , for/of 循环,只有一个 可迭代。
将 Iterable 转换为数组
有两种方法可以将可迭代对象转换为数组。 首先,JavaScript 有一个内置的 Array.from()
函数 可以将可迭代对象转换为数组的
const oneThruTen = {
[Symbol.iterator]: function() {
let num = 0;
return { next: () => ({ value: ++num, done: num > 10 }) }
}
};
Array.from(oneThruTen); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
于 扩展运算符 可迭代对象。 您可以使用它将可迭代对象转换为数组,如下所示。
const oneThruTen = {
[Symbol.iterator]: function() {
let num = 0;
return { next: () => ({ value: ++num, done: num > 10 }) }
}
};
[...oneThruTen]; // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
请登录后查看评论内容