concat()
能將兩個 Array 合併成單一 Array,若是 N 個 Array 呢 ? Ramda 沒有提供此 Function,但我們能自行組合出 concatAll()
。
Version
macOS Catalina 10.15
VS Code 1.39.1
Quokka 1.0.254
Ramda 0.26.1
Wink-fp 0.1.8
concat()
import { concat } from 'ramda';
let first = [1, 2, 3];
let second = [4, 5, 6];
concat(first, second); // ?
Ramda 提供了 concat()
,能將兩個 array 合併成單一 array。
concatAll
import { reduce, unapply, concat } from 'ramda';
let first = [1, 2, 3];
let second = [4, 5, 6];
let third = [7, 8, 9];
let concatAll = unapply(reduce(concat, []));
concatAll(first, second); // ?
concatAll(first, second, third); // ?
concat()
這類 binary function,只能組合兩個 array,但透過 reduce()
,只要提供初始值 []
,就能組合出 n 個 array。
但因為 reduce()
只能接受 array,特別使用 unapply()
組合成 variadic function,如此可接受 n 個 argument。
Wink-fp
import { concatAll } from 'wink-fp';
let first = [1, 2, 3];
let second = [4, 5, 6];
let third = [7, 8, 9];
concatAll(first, second); // ?
concatAll(first, second, third); // ?
Wink-fp 已經提供 concatAll()
,可直接使用。
concatAll()
[a]... -> [b]
將無限個數 array 合併成單一 array
Conclusion
unapply()
與reduce()
的組合可視為實現 variadic function 的 pattern