Creates a generator that iterates over an iterable, flattening nested iterables.
for...of
loop to iterate over the values of the given iterable.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
JavaScript, Array
Deep flattens an array.
JavaScript, Array
Flattens an array up to the specified depth.
JavaScript, Array
Creates an array of elements, ungrouping the elements in an array produced by zip and applying the provided function.