flat([1, 2, [3, 4]]); // [1, 2, 3, 4]
flat([1, 2, [3, [4]]]); // [1, 2, 3, 4]Вложенность не ограничена.
Array.prototype.reduce + рекурсия
function flat(arr) {
return arr.reduce((acc, curr) => {
if (Array.isArray(curr)) {
return [...acc, ...flat(curr)];
} else {
return [...acc, curr];
}
}, []);
}Вариант без рекурсивных вызовов (стэк)
function flatNonRecursive(arr) {
const stack = [...arr];
const result = [];
while (stack.length) {
const next = stack.pop();
if (Array.isArray(next)) {
stack.push(...next);
} else {
result.push(next);
}
}
return result.reverse();
}