DEV Community

Discussion on: I (roughly) defined (almost) every array method using recursion 😂

Collapse
 
aminnairi profile image
Amin

You got me at

How is this useful ? It's not.

Here is my proposal for Array.prototype.flat.

const flatten = (target, level = 1) => {
  if (!Array.isArray(target)) {
    return target;
  }

  if (target.length === 0) {
    return [];
  }

  const [item, ...remainingItems] = target;

  if (!Array.isArray(item) || level === 0) {
    return [item, ...flatten(remainingItems, level)];
  }

  return [...flatten(item, level - 1), ...flatten(remainingItems, level)];
};

console.log(flatten([1, 2, 3, [4, 5, [6, 7]]]));
// [1, 2, 3, 4, 5, [6, 7]]

console.log(flatten([1, 2, 3, [4, 5, [6, 7]]], Infinity));
// [1, 2, 3, 4, 5, 6, 7]
Enter fullscreen mode Exit fullscreen mode