若要對兩個 Array 相減,可使用 difference()
處理, 尤其對 Object 比較的是 Value 而不是 Reference。
Version
Ramda 0.27.1
Primitive
import { pipe, difference } from 'ramda'
let a = [1, 2, 3]
let b = [1, 4, 5]
pipe(
difference(a)
)(b) // ?
若想對兩個 Array 相減 a - b
,Ramda 提供了 difference()
。
difference()
[*] → [*] → [*]
對兩個 array 相減
[*]
:第一個 array
[*]
:第二個 array
[*]
:回傳相減結果
Object
import { pipe, difference } from 'ramda'
let a = [
{ name: 'Sam' },
{ name: 'Kevin' },
{ name: 'Jimmy' }
]
let b = [
{ name: 'Kevin' }
]
pipe(
difference(a)
)(b) // ?
difference()
依然適用於 Object Array。
ECMAScript 的
===
,對於 Object 是 reference equality,但以處理 data 角度而言,這並沒有實質用處,而difference()
比較的是 value equality,也就是 property 相等,就視為兩個 Object 相等,這在實務上非常有用
Conclusion
difference()
可輕易對兩 Array 相減,尤其對於 Object 是比較其 value equality,而不是 reference equality,非常實用