平铺迭代器
创建一个迭代器,用于迭代嵌套迭代器中的元素。
- 使用递归。
- 使用
for...of
循环遍历给定迭代器的值。 - 使用
Symbol.iterator
来检查每个值是否是一个可迭代对象。如果是,使用yield*
表达式递归地委托给相同的生成器函数。否则,yield
当前的值。
const flatIterator = function* (itr) {
for (let item of itr) {
if (item[Symbol.iterator]) yield* flatIterator(item);
else yield item;
}
};
const arr = [1, 2, [3, 4], [5, [6, [7], 8]], 9, new Set([10, 11])];
[...flatIterator(arr)]; // 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11