LeetCode/js/flatten-deeply-nested-array.js

35 lines
873 B
JavaScript
Raw Normal View History

/**
* @param {any[]} arr
* @param {number} depth
* @return {any[]}
*/
var flat = function (arr, n) {
let stack = [[arr, 0, 0]];
let flattened = [];
while (stack.length) {
let [arr, depth, i] = stack.pop();
if (i >= arr.length) {
// finished with the nested array
continue;
}
// if it's a nested array and not deep enough
if (depth < n && arr[i] instanceof Array) {
// gotta continue with the next element of the array
stack.push([arr, depth, i + 1]);
// gotta start with the first element of the nested
stack.push([arr[i], depth + 1, 0]);
// yielding is done only on the elements themselves
continue;
}
flattened.push(arr[i]);
stack.push([arr, depth, i + 1]);
}
return flattened;
};