数组扁平化(数组展开)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41805715/article/details/101232148

第一种: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(","))

猜你喜欢

转载自blog.csdn.net/qq_41805715/article/details/101232148
今日推荐