同步两个对象并应用新值
syncronize two objects and apply new values
我想实现的基本是这样的:
R.mergeDeepRight(
{ age: 40, contact: { email: 'baa@example.com' }},
{ name: 'fred', age: 10, contact: { email: 'moo@example.com' }}
);
但结果对象中没有 { name: 'fred' }
。
只应应用第一个对象中的键。
您可以使用omit after mergeDeepRight来省略不需要的键
let obj1 = { age: 40, contact: { email: 'baa@example.com' }}
let obj2 = { name: 'fred', age: 10, contact: { email: 'moo@example.com' }}
let ommitKeys = Object.keys(obj2).filter(key=> !obj1[key])
let concatValues = (k, l, r) => k == 'values' ? R.concat(l, r) : r
let output = R.omit(ommitKeys, R.mergeDeepRight(concatValues, obj1, obj2,))
console.log(output)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
这里的 ommitedKeys 变量保存了 Object1 中不存在的所有键,
替代方法是使用 Pick
let obj1 = { age: 40, contact: { email: 'baa@example.com' }}
let obj2 = { name: 'fred', age: 10, contact: { email: 'moo@example.com' }}
let desiredKeys = Object.keys(obj1)
let concatValues = (k, l, r) => k == 'values' ? R.concat(l, r) : r
let output = R.pick(desiredKeys, R.mergeDeepRight(concatValues, obj1, obj2,))
console.log(output)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
我会结合 mergeDeepRight
, pick
, and keys
制作一个可重复使用的函数,如下所示:
const funkyMerge = (o1, o2) =>
mergeDeepRight(o1, pick(keys(o1), o2))
console.log(funkyMerge(
{ age: 40, contact: { email: 'baa@example.com' }},
{ name: 'fred', age: 10, contact: { email: 'moo@example.com' }}
))
<script src="https://bundle.run/ramda@0.26.1"></script><script>
const {mergeDeepRight, pick, keys} = ramda </script>
我想实现的基本是这样的:
R.mergeDeepRight(
{ age: 40, contact: { email: 'baa@example.com' }},
{ name: 'fred', age: 10, contact: { email: 'moo@example.com' }}
);
但结果对象中没有 { name: 'fred' }
。
只应应用第一个对象中的键。
您可以使用omit after mergeDeepRight来省略不需要的键
let obj1 = { age: 40, contact: { email: 'baa@example.com' }}
let obj2 = { name: 'fred', age: 10, contact: { email: 'moo@example.com' }}
let ommitKeys = Object.keys(obj2).filter(key=> !obj1[key])
let concatValues = (k, l, r) => k == 'values' ? R.concat(l, r) : r
let output = R.omit(ommitKeys, R.mergeDeepRight(concatValues, obj1, obj2,))
console.log(output)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
这里的 ommitedKeys 变量保存了 Object1 中不存在的所有键,
替代方法是使用 Pick
let obj1 = { age: 40, contact: { email: 'baa@example.com' }}
let obj2 = { name: 'fred', age: 10, contact: { email: 'moo@example.com' }}
let desiredKeys = Object.keys(obj1)
let concatValues = (k, l, r) => k == 'values' ? R.concat(l, r) : r
let output = R.pick(desiredKeys, R.mergeDeepRight(concatValues, obj1, obj2,))
console.log(output)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
我会结合 mergeDeepRight
, pick
, and keys
制作一个可重复使用的函数,如下所示:
const funkyMerge = (o1, o2) =>
mergeDeepRight(o1, pick(keys(o1), o2))
console.log(funkyMerge(
{ age: 40, contact: { email: 'baa@example.com' }},
{ name: 'fred', age: 10, contact: { email: 'moo@example.com' }}
))
<script src="https://bundle.run/ramda@0.26.1"></script><script>
const {mergeDeepRight, pick, keys} = ramda </script>