Flattens an array up to the specified depth.
- Use recursion, decrementing
depth
by 1 for each level of depth.
- Use
Array..reduce()
and Array..concat()
to merge elements or arrays.
- Base case, for
depth
equal to 1
stops recursion.
- Omit the second argument,
depth
to flatten only to a depth of 1
(single flatten).
function flatten(arr, depth = 1) {
return arr.reduce((newArr, curEle) => {
if (depth > 1 && Array.isArray(curEle)) {
return newArr.concat(flatten(curEle, depth - 1));
} else {
return newArr.concat(curEle);
}
}, []);
}
console.log("flatten([1, [2], 3, 4], 3): ",
flatten([1, [2], 3, 4],
3));
flatten([1, "a", ["hello", ["world", "1"]]])
flatten([1, [2], 3, 4]); // [1, 2, 3, 4]
flatten([1, [2, [3, [4,
5], 6], 7],
8], 2); // [1, 2, 3, [4, 5], 6, 7, 8]