什么是数组扁平化
数组扁平化又称数组拍平,是指将一个多维数组转化为一个一维数组
如:将[1, 2, [ 3,[ 4, 5 ]]] 转化为 [1 ,2 ,3 ,4 ,5]
实现方法
1.flat函数
let arr = [1,2,[3,[4,5]]];
let arr1 = arr.flat(Infinity);
console.log(arr1);
flat()里面的参数为深度、纬度,意思是展开指定参数长度的嵌套数组,设为Infinity可以展开任意长度的嵌套数组
2.先转为字符串,再转化为数组
let arr = [1,2,[3,[4,5]]];
function myFlat(arr){
return arr.join(",").split(",").map(item=>{
return Number(item);
})
}
console.log(myFlat(arr));
- 字符串变为数组后,数组每一项类型为string,所以需要用map全部转为number
- 弊端:该方法只能处理多维数组里面全是number的情况
3.采用reduce方法递归调用
let arr = [1,2,[3,[4,5]]];
function myFlat(arr){
return arr.reduce((res,item)=>{
return res.concat(Array.isArray(item)?myFlat(item):item);
},[])
}
console.log(myFlat(arr));
4.采用一般递归调用
let arr = [1,2,[3,[4,5]]];
function myFlat(arr){
let arr1 = [];
arr.map(item=>{
if(Array.isArray(item)){
arr1 = arr1.concat(myFlat(item));
}else{
arr1.push(item);
}
})
return arr1;
}
console.log(myFlat(arr));
5.采用扩展运算符
let arr = [1,2,[3,[4,5]]];
function myFlat(arr){
while(arr.some(item=>Array.isArray(item))){
arr = [].concat(...arr);
}
return arr;
}
console.log(myFlat(arr));