js多维数组扁平化

一道题目实现js多维数组扁平化。类似这种效果:

1
[1,[2, 3],[4, 5, 6], [7, 8, 9,0]] -> [1,2,3,4,5,6,7,8,9,0]

以下就提供几种数组扁平化的方法:

1、concat方法

1
2
3
var dimensionalArr = [1,[2, 3],[4, 5, 6], [7, 8, 9,0]]
var flatArr = Array.prototype.concat.apply([],dimensionalArr)
console.log(flatArr)

2、ES6的reset参数…

1
2
3
var dimensionalArr = [1,[2, 3],[4, 5, 6], [7, 8, 9,0]]
var flatArr = [].concat(...dimensionalArr)
console.log(flatArr)

3、reduce concat,在网上查了下api,reduce这个ES5的方法我一直不咋用

1
2
3
4
5
6
7
// 递归, 适用于三维及以上
var dimensionalArr = [1,[2, 3],[4, 5, 6], [7, 8, 9,0]]
var flatten = function(arr) {
return arr.reduce((prev,curr)=>{
return prev.concat(Array.isArray(curr) ? flatten(curr) : curr)
}, [])
}

4、后来自己又google了一下,lodash和underscore都有现成的方法flattern,并且在多层嵌套的情况也有对应的方法flatternDeep。

1
2
3
4
5
6
7
var array = [1, [2, [3, [4]], 5]];

_.flattenDepth(array, 1);
// => [1, 2, [3, [4]], 5]

_.flattenDepth(array, 2);
// => [1, 2, 3, [4], 5]