Ramda 不提供深度混合?

Ramda does not provide deep mixin?

var _ = require('ramda');

var obj1 = {
    innerNum: 1,
    innerObj: {
        innerStr: 'a',
        innerStrB: 'Z'
    }
};

var obj2 = {
    innerNum: 2,
    innerObj: {
        innerStr: 'b'
    }
};

var mixedObj = _.mixin(obj1, obj2);

mixedIObj 不包括内部对象的 innerStrB。 任何 ramda 解决方案?

不清楚您想要什么。我见过的大多数 mixin/extend 实现都很肤浅,将第二个对象中的键值添加到第一个对象中的值,覆盖键重复的地方。

Ramda 确实具有在特定路径克隆具有更新值的对象的功能:assocPath。不过,我猜这并不能满足您的所有需求:

R.assocPath('innerObj.innerStr', 'b', obj1); //=> 
// { 
//    innerNum: 1,
//    innerObj: {
//      innerStr: 'b',
//      innerStrB: 'Z'
//    }
// }

问题是深度混合的真正含义是什么。如果对象有相同的结构,就很清楚了,如果不一样,可能就有点毛了:

mixinDeep(
    {a: 1, b: {c: 2, d: 3}},
    {b: {d: {e: 4, f: 5}, g: 6}}
);
// ?=>? {a: 1, b: {c: 2, d: {e: 4, f: 5}, g: 6}}

如果这就是您正在寻找的那种东西,那么 Ramda 团队希望有一个 issue raised or even a pull request.