function flatDeep(arr, d = 1) { return d > 0 ? arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatDeep(val, d-1) : val), []) : arr.slice(); } var arr1 = [1,2,3,[1,2,3,4, [2,3,4]]]; console.log(flatDeep(arr1, Infinity));