-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathflat.js
More file actions
59 lines (42 loc) · 1.74 KB
/
Copy pathflat.js
File metadata and controls
59 lines (42 loc) · 1.74 KB
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
function isArray (obj) {
return Array.isArray(obj)
// return Object.prototype.toString.call(obj) === '[object Array]'
}
function flat (arr, flatArr = []) {
if (!isArray(arr)) return flatArr.push(arr)
const arrArr = []
arr.forEach(val => {
isArray(val) ? arrArr.push(...val) : flatArr.push(val)
})
if (arrArr.length) flat(arrArr, flatArr)
return flatArr
}
function flat2 (arr, flatArr = []) {
if (!isArray(arr)) return flatArr.push(arr)
arr.forEach(val => {
isArray(val) ? flat2(val, flatArr) : flatArr.push(val)
})
return flatArr
}
function flat3 (arr, level = 1, flatArr = [], flatLevel = 0) {
if (!isArray(arr)) return flatArr.push(arr)
if (flatLevel > level) return flatArr.push(arr)
++flatLevel
arr.forEach(val => {
isArray(val) ? flat3(val, level, flatArr, flatLevel) : flatArr.push(val)
})
return flatArr
}
function flat4 (arr, level = 1, flatArr = [], flatLevel = 0) {
if (!isArray(arr)) return flatArr.push(arr)
if (flatLevel > level) return flatArr.push(arr)
++flatLevel
arr.forEach(val => flat4(val, level, flatArr, flatLevel))
return flatArr
}
var arr = ['a', ['b', 'c', ['d', 'e', ['f', 'g', ['h', 'i']]]], [1, 2, 3, 4, [5, [6, 7, [8, 9]]]]]
console.log('flat', flat(arr)) // ["a", "b", "c", 1, 2, 3, 4, "d", "e", 5, "f", "g", 6, 7, "h", "i", 8, 9]
console.log('flat2', flat2(arr)) // ["a", "b", "c", "d", "e", "f", "g", "h", "i", 1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log('flat3', flat3(arr, 2)) // ["a","b","c","d","e",["f","g",["h","i"]],1,2,3,4,5,[6,7,[8,9]]]
console.log('flat3', flat3(arr, Infinity)) // ["a", "b", "c", "d", "e", "f", "g", "h", "i", 1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log('flat3', flat4(arr, Infinity)) // ["a", "b", "c", "d", "e", "f", "g", "h", "i", 1, 2, 3, 4, 5, 6, 7, 8, 9]