与Ramda递归"合并"或"延伸"?

Him*_*mel 5 javascript functional-programming ramda.js

我试图找到一个同等功能的Lodash的合并使用Ramda,做一个递归对象键为基础的"合并"或"扩展".行为类似于以下内容:

let merged = R.someMethod(
  { name: 'Matt', address: { street: 'Hawthorne', number: 22, suffix: 'Ave' }},
  { address: { street: 'Pine', number: 33 }}
);

console.log(merged);

// => { name: 'Matt', address: { street: 'Pine', number: 33, suffix: 'Ave' }}
Run Code Online (Sandbox Code Playgroud)

我在下面简要介绍的pull请求中注意到R.set了,但之后很快就回滚了.从那以后,Ramda库是否已捕获此功能?

Ramda有这个功能吗?

Sco*_*her 7

可以使用创建相对简单的递归函数R.mergeWith.

function deepMerge(a, b) {
  return (R.is(Object, a) && R.is(Object, b)) ? R.mergeWith(deepMerge, a, b) : b;
}

deepMerge({ name: 'Matt', address: { street: 'Hawthorne', number: 22, suffix: 'Ave' }},
          { address: { street: 'Pine', number: 33 }});

//=> {"address": {"number": 33, "street": "Pine", "suffix": "Ave"}, "name": "Matt"}
Run Code Online (Sandbox Code Playgroud)


Sco*_*yet 6

Ramda目前不包括这样的功能.

有几次尝试创造一个,但他们似乎建立了这种功能真正需要的概念.

如果您认为值得添加,请随意提出问题.

更新

(两年后).这最终加入,在窗体的几个功能:mergeDeepLeft,mergeDeepRight,mergeDeepWith,和mergeDeepWithKey.