const flattenTco = ([first, ...rest], accumulator) => (first === undefined) ? accumulator : (Array.isArray(first)) ? flattenTco([...first, ...rest]) : flattenTco(rest, accumulator.concat(first)) const flatten = (n) => flattenTco(n, []); console.log(flatten([[1,[2,[[3]]]],4,[5,[[[6]]]]]))