多維數組轉一維數組


二維數組轉一維數組

利用ES6擴展運算符

var arr = [1,2,[3,4],5,[6,7]];
console.log([].concat(...arr));
//結果 [1, 2, 3, 4, 5, 6, 7]

利用apply特性,將數組作為參數展開

var arr = [1,2,[3,4],5,[6,7]];
console.log([].concat.apply([],arr));
//結果  
[1, 2, 3, 4, 5, 6, 7]
 
        

多維數組轉一維數組

使用ES6新增的flat 和 flatMap方法 【新增時間 2019-9-26】

ES2018 為數組實例新增了flat 、flatMap 方法,用於將二維 或 多為數組 降維 成一維數組

flat 方法默認沒有參數時只會降維降一層。  可以指定降維的次數

flat 方法不改變原數組

var arr = [1,[2,[3]]];
console.log(arr.flat());
//結果  [1, 2, Array(1)]

【注】如果想直接降為一維數組flat參數中填寫Infinity  

var arr = [1,2,3,[4,5,[6,7]],[8,[9,[10,[11,[12,[13,[14,[15]]]]]]]]];
console.log(arr.flat(Infinity));
//結果   [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

flatMap()方法,參數是一個回調函數,類似map方法的使用,數組的每個元素執行一次回調函數,然后對返回的數組執行flat()方法,只降一次維

var arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, [10, [11, [12, [13, [14, [15]]]]]]]]];

let result = arr.flatMap(item=>{
   if(item instanceof Array){
        return [...item]
    } else{
         return item      
   }
})
//結果  [1, 2, 3, 4, 5, Array(2), 8, Array(2)] 【只能降一次維】

 

不使用ES6的方法 

方法一:遍歷每一個元素

 1 var arr = [1, 2, 3, [4, 5, [6, 7]], [8, [9, [10, [11, [12, [13, [14, [15]]]]]]]]];
 2 var arr2 = [];
 3 function toArr(arr){
 4   if(arr.forEach){
 5       arr.forEach(item=>{
 6           if(item.forEach){
 7               toArr(item)
 8          }else{
 9             arr2.push(item)
10          }
11        })          
12     } else{
13        arr2.push(arr)    
14     }
    return arr2
15 }
   toArr(arr)
   console.log(arr2);

方法二:擴展運算符

//只要有一個元素有數組,那么循環繼續
while (ary.some(Array.isArray)) {
  ary = [].concat(...ary);
}

方法三:replace + split

let arr = [1, [2, [3, [4, 5]]], 6];
let str = JSON.stringify(arr)

arr = str.replace(/(\[|\])/g,"").split(",")

方法四:replace + JSON.parse

let arr = [1, [2, [3, [4, 5]]], 6];
let str = JSON.stringify(arr);

str = str.replace(/(\[|\])/g,"");
str = '[' + str + ']';

arr = JSON.parse(str)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM