Javascript 拍平数组的 N 种方法

flatten one level

方法一 利用 for 循环处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var flatten = function(array) {
var res = []
for (var i = 0; i < array.length; i++) {
var a = array[i]
if (Array.isArray(a)) {
for (var j = 0; j < a.length; j++) {
var b = a[j]
res.push(b)
}
} else {
res.push(a)
}
}
return res
}
flatten([1, [2, [3, [4]], 5]]) // => [1, 2, [3, [4]], 5]

方法二 利用数组的 reduce 方法

1
2
3
4
5
6
7
8
var flatten = function(array) {
var res = array.reduce(function(a, b) {
return a.concat(b)
}, [])
return res
}
flatten([1, [2, [3, [4]], 5]]) // => [1, 2, [3, [4]], 5]

方法三 用 ES6 改写方法二

1
2
3
4
5
const flatten = list => list.reduce(
(a, b) => a.concat(b), []
)
flatten([1, [2, [3, [4]], 5]]) // => [1, 2, [3, [4]], 5]

方法四 利用 ES6 的扩展符号 ... 方法

1
2
3
4
5
var flatten = function(array) {
return Array.prototype.concat(...array)
}
flatten([1, [2, [3, [4]], 5]]) // => [1, 2, [3, [4]], 5]

flatten deep

递归调用方法三

1
2
3
4
5
const flatten_deep = list => list.reduce(
(a, b) => a.concat(Array.isArray(b) ? flatten_deep(b) : b), []
)
flatten_deep([1, [2, [3, [4]], 5]]) // => [1, 2, 3, 4, 5]

如果对您有帮助,可以请我喝咖啡