數組扁平化(降維過程,多維數組經過扁平化變成一維數組)。
方法有很多,下面只列舉幾種
方法一:
ES6的 arr.flat(Infinity)方法會遞歸到指定深度將所有子數組連接,並返回一個新數組, depth指定嵌套數組中的結構深度,默認值為1,不管多少層則可以用Infinity關鍵字作為參數。
//數組扁平化 let arr = ['a', 2, [3, 'b', 5, [6, 7], 8], 9, 10, [11, [12, 13]]]; console.log(arr.flat(Infinity)) //["a", 2, 3, "b", 5, 6, 7, 8, 9, 10, 11, 12, 13]
方法二:
遞歸實現
//數組扁平化 let arr = ['a', 2, [3, 'b', 5, [6, 7], 8], 9, 10, [11, [12, 13]]]; //①遞歸實現 let result = []; let flatten = function(ary) { for(let i = 0; i < ary.length; i++){ let item = ary[i]; if (Array.isArray(ary[i])){ flatten(item); } else { result.push(item); } } return result } console.log('遞歸實現---',flatten(arr)) //["a", 2, 3, "b", 5, 6, 7, 8, 9, 10, 11, 12, 13]
方法三:
擴展運算符
//數組扁平化 let arr = ['a', 2, [3, 'b', 5, [6, 7], 8], 9, 10, [11, [12, 13]]]; //利用擴展運算符 function flatten(arr) { var arr; while (arr.some(v => Array.isArray(v))) { //arr.some() 其中存在一個滿足條件的,就會返回true,都不滿足返回false arr = [].concat(...arr); } console.log(arr) return arr; } console.log('擴展運算符---',flatten(arr)) //["a", 2, 3, "b", 5, 6, 7, 8, 9, 10, 11, 12, 13]