欲將兩個 Object 合併成單一 Object,若 Property 重複,則以第一個 Object 為主,可使用 Ramda 的 mergeLeft()
。
Version
macOS Mojave 10.15.3
VS Code 1.43.0
Quokka 1.0.282
Ramda 0.27.0
ECMAScript
let mergeLeft = (l, r) => Object.assign({}, r, l)
let left = {
title: 'FP in JavaScript',
price: 100
}
let right = {
price: 200
}
mergeLeft(left, right) // ?
其實 mergeLeft()
就是 ECMAScript 古老的 Object.assign()
。
Functional
import { mergeRight, flip } from 'ramda'
let left = {
title: 'FP in JavaScript',
price: 100
}
let right = {
price: 200
}
let mergeLeft = flip(mergeRight)
mergeLeft(left, right) // ?
mergeLeft()
其實可由 mergeRight()
藉由 flip()
翻轉 argument 而產生。
Ramda
import { mergeLeft } from 'ramda'
let left = {
title: 'FP in JavaScript',
price: 100
}
let right = {
price: 200
}
mergeLeft(left, right) // ?
Ramda 已經提供 mergeLeft()
可直接使用。
mergeLeft()
{k: v} → {k: v} → {k: v}
將兩個 object 合併,若 property 相同,則第一個 object 的 property 會蓋掉第二個 object
{k: v}
:第一個 object
{k: v}
:第二個 object
{k: v}
:回傳合併後的 object
Conclusion
mergeLeft()
與mergeRight()
差異只有 argument 相反,因此可藉由flip()
轉換即可