二維數組轉一維數組
利用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)
