数组可能有多维,有时候我们希望把多维数组降为一维数组,这种情况下用递归的方法进行降维,也可通过ES6的数组原型方法flat进行降维。下面给出相关实现:
1、前情提要
1. 何为多维数组?
[1,2,3] //这是以为数组
[1,2,[3,4]] //这是二维
…
简单来说,就是数组套数组的最高层数
[1,[2,4], [4,3,[4,5]]] 这个最高的是套了三层,那就是三维
2. 递归须知
1、确定递归条件
2、确定终止条件
2、利用forEach进行递归降维
let tmp = [];
function flat_1(arr) {
arr.forEach((item) => {
if (Array.isArray(item)) { //递归条件
flat_1(item);
} else { //终止条件
tmp.push(item);
}
});
}
flat_1(arr)
这时tmp便是已经一维数组
3、利用reduce进行递归降维
function flat_1(arr) {
return arr.reduce((pre,cur) => {
if(Array.isArray(cur)) { //递归条件
return pre.concat(flat_1(cur))
}
return pre.concat(cur) //终止条件
}, [])
}
flat_1(arr)
这时便会返回已经降维的数组
3、利用ES6提供的数组原型方法flat
进行降维
flat()方法创建一个新数组,其中所有子数组元素都以递归方式连接到该数组中,直到达到指定的深度 – MDN
该方法只有一个参数depth,用于指定嵌套数组结构应展平的深度级别。默认为1
简单来说就是,flat(2)可以拍平二维数组,flat(3)可以拍平3维数组,flat(n)
可以拍平n维数组,如果你不知道数组是几维,中间的维数可以定位无限大,即Infinity
,flat(Infinity)
拍平任意维数组:
arr.flat(Infinity)