1.数组拍平也称数组扁平化,就是将数组里面的数组打开,最后合并为一个数组。
2.实现
var arr = [1,2,[3,4,5,[6,7,8],9],10,[11,12]];
①:递归实现
function fn(arr){ let arr1 = []
arr.forEach((val)=>{
if(val instanceof Array){
arr1 = arr1.concat(fn(val))
}else{
arr1.push(val)
}
})
return arr1
}
②:reduce实现
function fn(arr){
return arr.reduce((prev,cur)=>{
return prev.concat(Array.isArray(cur)?fn(cur):cur)
},[])
}
③:Array.flat实现 Arry.flat
flat() 方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。
arr.flat(Infinity)
④:扩展运算符
function fn(arr){
let arr1 = [];
let bStop = true;
arr.forEach((val)=>{
if(Array.isArray(val)){
arr1.push(...val);
bStop = false
}else{
arr1.push(val)
}
})
if(bStop){
return arr1;
}
return fn(arr1)
}
⑤:toString
let arr1 = arr.toString().split(',').map((val)=>{
return parseInt(val)
})
console.log(arr1)
⑥:apply
function flatten(arr){
while(arr.some(item => Array.isArray(item))){
arr = [].concat.apply([],arr);
}
return arr;
}