今天看到了數組扁平化處理,猶記得之前面試被問到過,下面介紹一下數組扁平化處理的幾種形式:
題目要求:
/*
*将數組 arr = [1,2,3,4,[5,6,7,[8,9]]] 轉化為 [1, 2, 3, 4, 5, 6, 7, 8, 9]
*/
1、遞歸
var arr = [1,2,3,4,[5,6,7,[8,9]]];
//方法一:遞歸
function flatFun(arr) {
let list = [];
arr.forEach(item => {
if(item instanceof Array) {
list = list.concat(flatFun(item));
} else {
list.push(item);
}
})
return list
}
let res1 = flatFun(arr);
console.log(res1)
2、通過數組的原型函數,需預先知道數組的深度
var arr = [1,2,3,4,[5,6,7,[8,9]]];
//方法二:預先知道數組深度的情況下
let res2 = arr.flat(3);
console.log(res2)
3、通過toString方法【具有比較大的局限性,當元素不為數字時,結果可能不正确】
var arr = [1,2,3,4,[5,6,7,[8,9]]];
//方法三:通過toString()
let res3 = arr.toString().split(",").map(item => Number(item));
console.log(res3);
4、通過reduce進行歸并
//方法4 通過reduce進行數組歸并
var arr = [1,2,3,4,[5,6,7,[8,9]]];
function flatten(arr){
return arr.reduce(function(prev,next){
console.log(prev);
return prev.concat(Array.isArray(next)?flatten(next):next);
},[]);//reduce的第二個參數:作為歸并基礎的初始值
}
var res4 = flatten(arr);
console.log(res4);
看到這裡,是不是學到了很多你不知道的js;