To flatten an array with depth of level 1:
const inputArray = [1, 2, 3, [4, 5]];
console.log([].concat(...inputArray));
// Output: [1, 2, 3, 4, 5]
To flatten an array of a specified depth:
const input = [1, 2, 3, [4, 5, 6, [8, 9, 10]], 11, [12, 13, 14]];
const flatten = (arr, depth) =>
depth === 0 || !Array.isArray(arr) ? arr :
arr.reduce((acc, curr) =>
Array.isArray(curr) ? acc.concat(flatten(curr, depth - 1)) :
acc.concat(curr), [])
console.log(flatten(input, 3));
// Ouput: [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14]
To flatten an array infinitely:
const input = [1, 2, 3, [4, 5, 6, [8, 9, 10]], 11, [12, 13, 14]];
const flatten = (arr) =>
!Array.isArray(arr) ? arr : arr.reduce((acc, curr) =>
Array.isArray(curr) ? acc.concat(flatten(curr)) :
acc.concat(curr), []);
console.log(flatten(input));
// Ouput: [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14]