Array.prototype.myFlat = function(d = 1) {
let arr = [...this];
return d > 0 ? arr.reduce((acc, val) => {
return acc.concat(Array.isArray(val) ? val.myFlat(d - 1) : val)
},[])
: arr.slice()
}
const b = [1, 2, 3, [4, [5, [6]]]].myFlat(Infinity)
console.log(b)