数组扁平是啥?
数组扁平化是指将一个多维数组变为一维数组;
实现扁平的基本思想:遍历数组arr,若arr[i]为数组则递归遍历,直至arr[i]不为数组然后与之前的结果concat。
扁平实现
- flat方法
1
2let arr = [[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10];
arr.flat(Infinity); //[1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 11, 12, 12, 13, 14, 10] - 递归实现
1
2
3
4
5
6
7
8
9
10
11function flatten(arr) {
var res = [];
arr.map(item => {
if(Array.isArray(item)) {
res = res.concat(flatten(item));
} else {
res.push(item);
}
});
return res;
} - reduce实现(也是递归的一种写法)
1
2
3
4
5function flatten(arr){
return arr.reduce((result,item)=>{
return result.concat(Array.isArray(item) ? flatten(item) : item)
},[])
} - ES6
...
运算符实现1
2
3
4
5
6function flatten(arr) {
while(arr.some(item=>Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
} - 转字符串拆分实现
1
2
3
4
5function flatten(arr) {
return arr.join(',').split(',').map(function(item) {
return parseInt(item);
})
}