若我們想找出 Array 中所有 Combination,可使用 flatMap()
與 slice()
實現。
Version
ECMAScript 2020
Array.prototype.map()
let data = [1, 2, 3]
let f = a => a.map(
(x, i) => a.slice(i+1).map(y => [x, y])
)
f(data) // ?
- 使用
map()
產生每個 item 與其 index - 使用
slice()
對每個 item 產生其 sub-array - 使用
map()
產生 pair 回傳
雖然取出所有 combination,但為 nested array。
Array.prototype.flatMap()
let data = [1, 2, 3]
let f = a => a.flatMap(
(x, i) => a.slice(i+1).map(y => [x, y])
)
f(data) // ?
- 使用
flatMap()
讓 nested array 只剩下一層
Conclusion
- 實務上若有若有兩層 loop 需求會寫出兩層
map()
,因而產生 nested array,可將外層直接使用flatMap()
攤平