基礎學習:JavaScript(ES6)扁平化嵌套方法flatMap()和flat()
Array.prototype.flatMap()
flatMap() 方法首先使用映射函數映射每個元素,然后將結果壓縮成一個新數組篱竭。它與 map 連著深度值為1的 flat 幾乎相同,但 flatMap 通常在合并成一種方法的效率稍微高一些。
//只有一層
const arr1 = [1, 2, 3, 4,[5],6,[7]];
const res=arr1.flatMap(x =>x)
console.log(res);
//打永绸谩:(7) [1, 2, 3, 4, 5, 6, 7]
//兩層時
const arr2 = [1, 2, 3, 4,[[5]],6,[[[7]]]];
const res=arr2.flatMap(x =>x)
console.log(res);
打印:[1, 2, 3, 4, [5], 6, [[7]]]
Array.prototype.flat()
flat() 方法會按照一個可指定的深度遞歸遍歷數組娇澎,并將所有元素與遍歷到的子數組中的元素合并為一個新數組返回笨蚁。
參數:depth 可選–(指定要提取嵌套數組的結構深度,默認值為 1)
返回值:一個包含將數組與子數組中所有元素的新數組趟庄。
//depth可選括细,默認1
const arr1 = [1, 2, 3, 4,[5],6,[7]];
console.log(arr1.flat());
//打印:(7) [1, 2, 3, 4, 5, 6, 7]
//depth---2
const arr1 = [1, 2, 3, 4,[[5]],[6],[[7]],[[8]]];
console.log(arr1.flat(2));
//打悠萆丁:(7) [1, 2, 3, 4, 5, 6, 7]
//depth---Infinity 不管有多少層嵌套奋单,都要轉成一維數組
const arr1 = [1, 2, 3, 4,[[5]],[6],[[7]],[[8]],[[[[[[9]]]]]] ];
console.log(arr1.flat(Infinity));
//打印:(9)?[1, 2, 3, 4, 5, 6, 7, 8, 9]
注意:如果原數組有空位虑鼎,flat()方法會跳過空位辱匿。
[1, 2, , 4, 5].flat()
// [1, 2, 4, 5]
那回歸本題,如何實現一個 flatMap 函數 ?
第一種:沒說不讓用flat炫彩;所以有個取巧的辦法 const flatMap = arr => arr.flat().map(x =>x);
第二種:flat()和flatMap()本質上就是是歸納(reduce) 與 合并(concat)的操作匾七。
letarr=[[0,1],[2,3],[4,5]];
letnewArr=arr.reduce((pre,cur)=>{returnpre.concat(cur)}, [])
console.log(newArr);// [0, 1, 2, 3, 4, 5]