console.log([1, [2, [3, [4, [5, [6]]]]]].flat(Infinity));
console.log(
[1, [2, [3, [4, [5, [6]]]]]].flatMap(item =>
!Array.isArray(item) ? (++item) ** 2 : item,
),
);
function flattenOfReduceWithConcat(arr) {
return arr.reduce(
(acc, val) =>
Array.isArray(val)
? acc.concat(flattenOfReduceWithConcat(val))
: acc.concat(val),
[],
);
}
function flattenOfReduceWithPush(arr) {
return arr.reduce((acc, item) => {
if (Array.isArray(item)) {
acc.push(...flattenOfReduceWithPush(item));
} else acc.push(item);
return acc;
}, []);
}
function flattenOfStack(arr) {
const stack = [...arr];
const result = [];
while (stack.length) {
const next = stack.pop();
if (Array.isArray(next)) {
stack.push(...next);
} else {
result.unshift(next);
}
}
return result;
}