版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
第一种: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(","))