掌握这些js扁平化数组的方法,才有底气怼面试官

489 阅读1分钟

需求: 将给定的数组拍平,即变成一维数组,你能想到哪几种方法。

var arr = [1,2,[3,[4,5,[6]],7],8];
//第一种处理方法
var tempArr = JSON.stringify(arr).split('');
var arrFlat = [];
for(var i=0;i<tempArr.length;i++){
  if(!isNaN(Number(tempArr[i]))) arrFlat.push(Number(tempArr[i]))
}
//第二种方法
var arrFlat = arr.flat(Infinity)
//第三种方法
var arrFlat = arr.join(',').split(',').map(item => Number(item));
//第四种方法
var arrFlat = [];
function flatFn(ary){
  for(var i=0,l=ary.length;i<l;i++){
    if(Array.isArray(ary[i])){
      flatFn(ary[i])
    }else{
      arrFlat.push(ary[i])
    }
  }
}
//第五种方法
while(arr.find(item => Array.isArray(item))){
  arr = [].concat(...arr)
}
//第六种方法
function arrFlat(arr){
  return arr.reduce(function fn(pre,cur){
    return pre.concat(Array.isArray(cur)?arrFlat(cur):cur)
  },[])
}

利用数组的map方法我试过了,基本上跟遍历差不多。
欢迎评论指出不足以及更多方法。