数组扁平化,实际上就是拉平数组
flat
flat将嵌套的数组“拉平”,变成一维数组。该方法返回一个新数组,对原数据没有影响。
arr.flat(depth)
参数depth 指定要提取嵌套数组的结构深度,默认值为 1
参数为Infinity时,展开任意深度的嵌套数组
flat的返回值是一个包含将数组与子数组中所有元素的新数组。
方法一 递归
function fn(arr){
let res = [];
for(let i=0;i<arr.length;i++){
if(Array.isArray(arr[i])){
res = res.concat(fn(arr[i]));
}else{
res.push(arr[i]);
}
}
return res;
}
方法二 reduce
与 concat
function fn(arr){
return arr.reduce(function(pre,item){
return pre.concat(Array.isArray(item)?fn(item):item);
},[]);
}
方法三 拓展运算符与some
function fn(arr){
while(arr.some(item=>Array.isArray(item))){
arr = [].concat(...arr);
}
return arr;
}
总结
介绍了flat的使用,以及面试可能会遇到让写出数组扁平化实现的方法,上文列举了几个,还会有一些其他方式就不一一列举了