數組的成員還是數組時,Array.prototype.flat()用於將嵌套的數組“拉平”,編程一維數組。該方法返回一個新的數組,對原數據沒有影響。
[1, 2, [3, 4]].flat()
// [1, 2, 3, 4]
flat()默認只會“拉平”一層,如果想要“拉平”多層的嵌套數組,可以將flat()方法的參數寫成一個整數,表示想要拉平的層數,默認爲1.
[1, 2, [3, [4, 5]]].flat()
// [1, 2, 3, [4, 5]]
[1, 2, [3, [4, 5]]].flat(2)
// [1, 2, 3, 4, 5]
如果不管有多少層嵌套,都要轉成一維數組,可以用Infinity關鍵字作爲參數
[1, [2, [3]]].flat(Infinity)
// [1, 2, 3]
如果原數組有空位,flat()方法會跳過空位
[1, 2, , 4, 5].flat()
// [1, 2, 4, 5]
flatMap()只能展開一層數組
[2, 3, 4].flatMap((x) => [x, x * 2])
// [2, 4, 3, 6, 4, 8]
js中Map和flatMap的區別
var a = [1,2,3]
var b = [3,4]
a.map(a => (b.map(o => [a,o])))
// [ [[1,3],[1,4]], [[2,3],[2,4]], [[3,3],[3,4]] ]
a.flatMap(a => (b.map(o => [a,o])))
// [ [1,3],[1,4],[2,3],[2,4],[3,3],[3,4] ]
區別就是flatMap少嵌套一層