Files
30-seconds-of-code/snippets/flat-iterator.md
2023-04-28 22:29:23 +03:00

824 B

title, type, tags, author, cover, dateModified
title type tags author cover dateModified
Flat iterator snippet
array
iterator
generator
chalarangelo balloons 2022-03-09T05:00:00-04:00

Creates a generator that iterates over an iterable, flattening nested iterables.

  • Use recursion.
  • Use a for...of loop to iterate over the values of the given iterable.
  • Use Symbol.iterator to check if each value is an iterable. If it is, use the yield* expression to recursively delegate to the same generator function. Otherwise, yield the current value.
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