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

//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 }

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

let arr1 = [1, 2];
let arr2 = [3, 4];
concat
arr1 = arr1.concat(arr2);
扩展运算符
arr1 = [...arr1, ...arr2];
或者
arr1.push(...arr2);
当数据小的时候三者没有区别 但是数据特别大的时候 concat性能远远高于其他两个

猜你喜欢

转载自www.cnblogs.com/cq1715584439/p/10742854.html