mirror of
https://gitlab.com/mfocko/LeetCode.git
synced 2024-11-14 01:49:41 +01:00
35 lines
873 B
JavaScript
35 lines
873 B
JavaScript
|
/**
|
||
|
* @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;
|
||
|
};
|