function flat(list) {
if (!Array.isArray(list)) return [];
const stack = [[0, list]];
const result = [];
while (stack.length) {
const [idx, arr] = stack.pop();
if (arr.length <= idx) continue;
for (let i = idx; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
stack.push([i + 1, arr], [0, arr[i]]);
break;
}
result.push(arr[i]);
}
}
return result;
}
console.log(flat([1, 2, [3], [4], [5, 6, 7, [8, 9, [10, 11, 12], [13], [14, 15, [16, 17]]]]]))