Ramda:mergeDeepRight + mergeAll(...也许是 mergeDeepRightAll)
Ramda: mergeDeepRight + mergeAll (...perhaps mergeDeepRightAll)
目前在 Ramda 中,如果我想深度合并(右)多个对象我....
var a = _.mergeDeepRight( { one: 1 }, { two: { three: 3 } } )
var b = _.mergeDeepRight( a, { three: { four: 4 } } )
var c = _.mergeDeepRight( b, { four: { five: 5 } } )
// c === { one:1, two: { three: 3 }, three: { four: 4 }, four: { five: 5 } }
如果我使用 _.mergeAll
(即 _.mergeAll( a, b, c )
)它 returns { one:1, two: { three:3 } }
因为 _.mergeAll
不深
是否有更整洁的深度合并(正确)多个对象的方法?像...
_.mergeDeepRightAll( a, b, c )
reduce
在这里可能是个不错的选择,因为我们正在将一系列项目转化为一个项目。
如果我们将输入更改为
var a = mergeDeepRight( { one: 1 }, { two: { three: 3 } } )
var b = { three: { four: 4 } }
var c = { four: { five: 5 } }
我们可以做到
const mergeDeepAll = reduce(mergeDeepRight, {})
mergeDeepAll([a, b, c])
// -> {"four": {"five": 5}, "one": 1, "three": {"four": 4}, "two": {"three": 3}}
如果你不想以数组的形式提供参数,你可以 unapply
它,尽管数组更符合 R.mergeAll
的签名
const mergeDeepAll = unapply(reduce(mergeDeepRight, {}))
mergeDeepAll(a, b, c)
我会注意到这些示例实际上没有任何冲突键,因此直接 R.mergeAll
在这里可以工作。但是,这些输出都不是您提到的确切顺序。
目前在 Ramda 中,如果我想深度合并(右)多个对象我....
var a = _.mergeDeepRight( { one: 1 }, { two: { three: 3 } } )
var b = _.mergeDeepRight( a, { three: { four: 4 } } )
var c = _.mergeDeepRight( b, { four: { five: 5 } } )
// c === { one:1, two: { three: 3 }, three: { four: 4 }, four: { five: 5 } }
如果我使用 _.mergeAll
(即 _.mergeAll( a, b, c )
)它 returns { one:1, two: { three:3 } }
因为 _.mergeAll
不深
是否有更整洁的深度合并(正确)多个对象的方法?像...
_.mergeDeepRightAll( a, b, c )
reduce
在这里可能是个不错的选择,因为我们正在将一系列项目转化为一个项目。
如果我们将输入更改为
var a = mergeDeepRight( { one: 1 }, { two: { three: 3 } } )
var b = { three: { four: 4 } }
var c = { four: { five: 5 } }
我们可以做到
const mergeDeepAll = reduce(mergeDeepRight, {})
mergeDeepAll([a, b, c])
// -> {"four": {"five": 5}, "one": 1, "three": {"four": 4}, "two": {"three": 3}}
如果你不想以数组的形式提供参数,你可以 unapply
它,尽管数组更符合 R.mergeAll
的签名
const mergeDeepAll = unapply(reduce(mergeDeepRight, {}))
mergeDeepAll(a, b, c)
我会注意到这些示例实际上没有任何冲突键,因此直接 R.mergeAll
在这里可以工作。但是,这些输出都不是您提到的确切顺序。