js里常见的数组扁平化

naxinqiu1 / 2023-05-11 / 原文

第一种方法:递归。
var arr = [1,[2,[3,4]]];

function myfc(aa){
  var lastArr = [];
  for(var i = 0;i<aa.length;i++){
    if(Array.isArray(aa[i])){
      lastArr.concat(myfc(aa[i]));
    } else {
      lastArr.push(aa[i]);
    }
  }
  return lastArr;
}
console.log(myfc(arr));

 第二种方法:reduce.   

reduce(
    (prev,cur)=>{
        
},[])一个回调函数,一个初始值。  初始值给值,prev就有值,没给prev就是数组索引为0的元素

注意: reduce() 对于空数组是不会执行回调函数的。

var thisArr = [1, [2, [3, 4]]];

function myReduce(arr){
  return arr.reduce((prev,cur)=>{
    return prev.concat(Array.isArray(cur) ? myReduce(cur) : cur);
  },[])
}
console.log(myReduce(thisArr))


 

第三种方法flat(depth)

es6提供了一个新方法 flat(depth),参数depth,代表展开嵌套数组的深度,默认是1

let arr = [1, [2, 3, [4, [5]]]];
arr.flat(3); // [1,2,3,4,5]