平铺迭代器

创建一个迭代器,用于迭代嵌套迭代器中的元素。

  • 使用递归。
  • 使用 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