-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy patharray_flat.js
39 lines (32 loc) · 927 Bytes
/
array_flat.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*
JavaScript js function
Array flat flatten Array.flat
@xunter
*/
function flatArr(arr, depth) {
let flattenArr = [];
let arrMapStack = [{ arr: arr, i: 0, depth: 0 }];
depth = depth || 1;
while (arrMapStack.length) {
let currarrscope = arrMapStack.pop();
let currarr = currarrscope.arr;
let curri = currarrscope.i;
let currdepth = currarrscope.depth;
for (let i = curri; i < currarr.length; i++) {
if (!Array.isArray(currarr[i]) || currdepth == depth) {
flattenArr.push(currarr[i]);
} else {
arrMapStack.push({ arr: currarr, i: i + 1, depth: currdepth });
arrMapStack.push({ arr: currarr[i], i: 0, depth: currdepth + 1 });
break;
}
}
}
return flattenArr;
}
var array_flat = flatArr;
if (typeof (Array.prototype.flat) == "undefined") {
Array.prototype.flat = function (depth) {
return array_flat(this, depth);
};
}