多种方式实现数组的扁平化处理

//task 1 split方法处理
1 function flattening(arr) { 2     let arr1 = (arr + "").split(","); 3     //此时获得的每一项的字符数组
4     //接着转数字
5     let arr2 = arr1.map(item => { 6         return item * 1; 7  }) 8     return arr2; 9 }
//task 2 递归
 1 function flattening(arr, newArr = []) {  2     for (let i = 0; i < arr.length; i++) {  3         if (Array.isArray(arr[i])) {  4  flattening(arr[i], newArr)  5         } else {  6  newArr.push(arr[i])  7  }  8  }  9     return newArr 10 }
//task 2.1 递归第二种写法
 1 function flattening(arr) {  2     var res = [];  3     arr.map(item => {  4         if (Array.isArray(item)) {  5             res = res.concat(flattening(item));  6         } else {  7  res.push(item);  8  }  9  }); 10     return res; 11 }
//task 3 扩展运算符
1 function flattening(arr) { 2     while (arr.some(item => Array.isArray(item))) { 3         arr = [].concat(...arr) 4  } 5     return arr; 6 }
//task 4 reduce+递归实现
 1 function flattening(arr) {  2       let newArr=arr.reduce((prev,cur)=>{  3         return [].concat(prev,cur)  4  })  5     
 6     let flag=newArr.some(item=>Array.isArray(item))  7     if(flag){  8         return flattening(newArr);  9     }else{ 10         return newArr 11  } 12 }

 

其实说了这么多方法 es6有一个封装好的方法能够进行数组扁平化处理  node

Array.flat();es6

flat 方法默认没有参数  这时只会降维降一层 数组

能够传数字指定降维次数  传个无穷就是所有展开 性能

flat放法不会改变原数组  而且不支持node运行spa

 

顺带提一句合并数组的几种方法

let arr1 = [1, 2];
let arr2 = [3, 4];
concat
arr1 = arr1.concat(arr2);
扩展运算符
arr1 = [...arr1, ...arr2];
或者
arr1.push(...arr2);
当数据小的时候三者没有区别 可是数据特别大的时候 concat性能远远高于其余两个
相关文章
相关标签/搜索