js的数组扁平化处理(数组拍平)

384 阅读1分钟

什么是数组扁平化

数组扁平化又称数组拍平,是指将一个多维数组转化为一个一维数组

如:将[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));