0
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 解决方案?

4

1 回答 1

2

目前尚不清楚您在这里想要什么。我见过的大多数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 团队很乐意提出问题甚至是拉取请求

于 2015-01-29T20:54:44.037 回答