数组扁平化
es6提供的新方法 flat(depth)
let a = [1,[2,3]];
a.flat(); // [1,2,3]
a.flat(1); //[1,2,3]
flat(depth) 方法中的参数 depth,代表展开嵌套数组的深度,默认是 1.如果我们可以提前知道数组的维度,对这个数组进行扁平化处理,参数depth的值就是数组的维度减一。
或者直接设置为 infinity
let a = [1,[2,3,[4,[5]]]];
a.flat(Infinity); // [1,2,3,4,5] a是4维数组
for 循环
function flatArr(arr){
var res = [];
for(let i = 0, length = arr.length; i< length; i++){
if(Array.isArray(arr[i])){
res = res.concat(floatArr(arr[i]))
} else {
res = res.concat(arr[i])
}
}
return res
}
while 循环
var arr1 = [1, 2, 3, [1, 2, 3, 4, [2, 3, 4]]];
function flatArr(arr){
while(arr.some(item => Array.isArray(item))){
console.log(...arr)
arr = [].concat(...arr)
}
return arr ;
}
flatArr(arr1); //[1, 2, 3, 1, 2, 3, 4, 2, 3, 4]
split 配合 toString
这个只针对 数组的项全为数字,
function flatArr( arr) {
return arr.toString().split(',').map(item => +item);
}
flatArr(arr1); //[1, 2, 3, 1, 2, 3, 4, 2, 3, 4]
// +"9" 等于9
reduce 方法
var arr1 = [1, 2, [3], [1, 2, 3, [4, [2, 3, 4]]]];
function flatten(arr) {
return arr.reduce((res,next) =>{
return res.concat(Array.isArray(next)? flatten(next) : next);
},[]);
}
运用了数组的 reduce 方法, 需要注意的是 reduce 方法,我们传了两个参数. 第二个参数是一个空数组,也是作为遍历的开始.
最后更新于
这有帮助吗?