數組扁平化(降維過程,多維數組經過扁平化變成一維數組)。
方法有很多,下面只列舉幾種
方法一:
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]
