数组扁平化(数组展开)

第一种:flat()

let arr1=[1,2,[a,b,c],3];
console.log(arr1.flat());

flat()还未加入到ES6规范中。 如果有多层可以在flat()中加参数Infinity

let arr1=[1,2,[a,b,c,[e,f]],3];
console.log(arr1.flat(Infinity));

问题:

let arr1=[1,2,{
          
   x:1,y:2},3];
console.log(arr1.flat(Infinity));

第二种:map

function flat(items){
          
   
    let res=[];
    items.map(item=>{
          
   
       if(Array.isArray(item)){
          
   
	   res=res.concat(flat(item));
	}else{
          
   
	   res.push(item);
	}
    })
    return res;
}

第三种 : forEach

function flat(items){
          
   
    let res=[];
    items.forEach(item=>{
          
   
       if(Array.isArray(item)){
          
   
            res=res.concat(flat(item));
       }else{
          
   
            res.push(item);
       }
    })
    return res;
}

也可以使用for循环,原理和forEach一样,遍历数组中的每一项。 第四种:reduce

function flat(items){
          
   
    return items.reduce((prev,current)=>{
          
   
         prev.concat(Array.isArray(current)?flat(current):item);
    },[]);
}

第五种:扩展运算符

function flat(items) {
          
   
    while(items.some(item=>Array.isArray(item))) {
          
   
        items= [].concat(...items);
    }
    return items;
}

也可以采用toString+split或join+split,但是 toString 转化为字符串的时候,不会区分字符串和数字类型,如果需要区分数据类型最好不要使用。

console.log(arr1.toString().split(","))
console.log(arr1.join(",").split(","))
经验分享 程序员 微信小程序 职场和发展