多種方式實現數組的扁平化處理

//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性能遠遠高於其餘兩個
相關文章
相關標籤/搜索