我們都知道當(dāng)面對(duì)一些多維數(shù)組轉(zhuǎn)化成一維數(shù)組的時(shí)候都比較麻煩,但es6的flat方法就會(huì)幫我們節(jié)約很多時(shí)間酪耕,而且對(duì)原數(shù)據(jù)也不會(huì)有影響。
[1, 2, 3, 4, [5], 6].flat() // [1, 2, 3, 4, 5, 6]
在上面代碼中轨淌,原數(shù)組的成員里面有一個(gè)數(shù)組迂烁,flat()方法將子數(shù)組的成員取出來(lái),添加在原來(lái)的位置递鹉。
flat()默認(rèn)只會(huì)“拉平”一層盟步,如果想要“拉平”多層的嵌套數(shù)組,可以將flat()方法的參數(shù)寫成一個(gè)整數(shù)躏结,表示想要拉平的層數(shù)却盘,默認(rèn)為1
[1, 2, 3, [4, [5]],6].flat() // [1,2,3,4,[5],6]
[1, 2, 3, [4, [5]],6].flat(2) // [1,2,3,4,5,6]
上面代碼中,flat()的參數(shù)為2,表示要拉平兩層的嵌套數(shù)組黄橘。
如果不管有多少層嵌套兆览,都要轉(zhuǎn)成一維數(shù)組,可以用Infinity關(guān)鍵字作為參數(shù)塞关。
[1, [2, [3, [4]]]].flat(Infinity) // [1,2,3,4]
如果原數(shù)組有空位抬探,也會(huì)跳過(guò)空位
[1,2,3,,4].flat() // [1,2,3,4]
flatMap對(duì)原數(shù)組的每個(gè)成員執(zhí)行一個(gè)函數(shù),相當(dāng)于執(zhí)行Array.prototype.map(),然后對(duì)返回值組成的數(shù)組執(zhí)行flat方法帆赢。該方法返回一個(gè)新數(shù)組小压,不改變?cè)瓟?shù)組。
[1,2,3,4].flatMap(row => [row, row*2])? // [1,2,2,4,3,6,4,8] 相當(dāng)於 [[1, 2], [2, 4], [3, 6], [4, 8]]
flatMap僅僅只能展開一層數(shù)組