欲將兩個 Object 合併成單一 Object,若 Property 重複,則以第二個 Object 為主,可使用 Ramda 的 mergeRight()
。
Version
macOS Mojave 10.15.3
VS Code 1.43.0
Quokka 1.0.282
Ramda 0.27.0
ECMAScript
let merge = (l, r) => Object.assign({}, l, r)
let left = {
title: 'FP in JavaScript',
price: 100
}
let right = {
price: 200
}
merge(left, right) // ?
其實 merge()
就是 ECMAScript 古老的 Object.assign()
。
Ramda
import { merge } from 'ramda'
let left = {
title: 'FP in JavaScript',
price: 100
}
let right = {
price: 200
}
merge(left, right) // ?
Ramda 已經提供 merge()
可直接使用。
merge()
{k: v} -> {k: v} -> {k: v}
將兩個 object 合併,若 property 相同,則第二個 object 的 property 會蓋掉第一個 object
{k: v}
:第一個 object
{k: v}
:第二個 object
{k: v}
:回傳合併後的 object
price
property 重複,以第二個 object 的 200
取代。
不過在 Ramda 官網很明確顯示 merge()
已屬於 deprecated
,雖然目前還能使用,是否有建議替代方案呢 ?
mergeRight()
import { mergeRight } from 'ramda'
let left = {
title: 'FP in JavaScript',
price: 100
}
let right = {
price: 200
}
mergeRight(left, right) // ?
Ramda 亦提供了 mergeRight()
取代 merge()
。
mergeRight()
{k: v} -> {k: v} -> {k: v}
將兩個 object 合併,若 property 相同,則第二個 object 的 property 蓋掉第一個 object
{k: v}
:第一個 object
{k: v}
:第二個 object
{k: v}
:回傳合併後的 object
可以發現 merge()
與 mergeRight()
功能完全一樣,也因此 merge()
被列入 deprecated
,將以 mergeRight()
取代 merge()
。
Conclusion
merge()
雖然仍可使用,但建議以mergeRight()
取代merge()