若想將兩個 Array 加以合併,並只保留不重複部分,Ramda 提供了 union()
。
Version
macOS Mojave 10.14.5
VS Code 1.4
Quokka 1.0.209
Ramda 0.26.1
Functional
import { pipe, concat, uniq } from 'ramda';
let first = [1, 3, 5];
let second = [5, 3, 7];
// union :: [*] → [*] → [*]
let union = pipe(concat, uniq);
union(first, second); // ?
根據 union()
原始意義:將兩個 Array 加以合併,只保留不重複部分,其實我們也可以使用 concat()
與 uniq()
組合而成。
Ramda
import { union } from 'ramda';
let first = [1, 3, 5];
let second = [5, 3, 7];
union(first)(second); // ?
Ramda 其實已經提供了 union()
,可直接使用。
uniq()
[*] → [*] → [*]
將兩個 array 合併成不重複 array
[*]
:第一個 array
[*]
:第二個 array
[*]
:回傳合併後不重複 array
Object
import { union } from 'ramda';
let first = [
{ firstName: 'Sam', lastName: 'Xiao'},
{ firstName: 'Kevin', lastName: 'Yang'},
{ firstName: 'Jimmy', lastName: 'Huang'},
];
let second = [
{ firstName: 'Kevin', lastName: 'Yang'},
];
console.dir(union(first)(second));
union()
也可以用在 object。
由於
union()
使用uniq()
實現,而uniq()
又使用equals()
比較,而非 ECMAScript 的===
,因此比較的是 value equality,而非 reference equality
Conclusion
- 只要牽涉到比較,Ramda 都是使用自家的
equals()
,而非 ECMAScript 的===
,因此是 value equality,而非 reference equality