实现js数组扁平化(数组降维:多维变为一维)的5种方法


​​
Method 1:手写递归

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function flatten(arr) {
const result = [];

arr.forEach((i) => {
if (Array.isArray(i))
result.push(...flatten(i));
else
result.push(i);
})

return result;
}

// Usage
const problem = [1, 2, 3, [4, 5, [6, 7], 8, 9]];

flatten(problem); // [1, 2, 3, 4, 5, 6, 7, 8, 9]

Method 2:ES6提供的Array.prototype.flat( ) 方法

1
2
3
let arr = [10,[1,2],[12,[3,4,[5,6,16]],6,6],7];

arr = arr.flat(Infinity);

Method 3:Array.prototype.toString( ) 方法

1
2
3
let arr = [10,[1,2],[12,[3,4,[5,6,16]],6,6],7];

arr = arr.toString().split(',').map(item => Number(item))

Method 4:JSON.stringify( ) 方法

1
2
3
let arr = [10,[1,2],[12,[3,4,[5,6,16]],6,6],7];

arr = JSON.stringify(arr).replace(/(\[|\])/g, '').split(',').map(item => Number(item))

Method 5:Array.prototype.some( ) 方法

1
2
3
4
5
let arr = [10,[1,2],[12,[3,4,[5,6,16]],6,6],7];

while(arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr)
}

Method 6:Array.prototype.reduce( ) 方法

1
2
3
4
5
6
function flatten(arr){
var arr = arr || [];
return arr.reduce(function(prev, next){
return Object.prototype.toString.call(next) === '[object Array]' ? prev.concat(flatten(next)) : prev.concat(next);
},[])
}

如有疑问,欢迎添加我的个人微信:

alexzhli