【问题标题】:Ramda does not provide deep mixin?Ramda 不提供深度混合?
【发布时间】:2015-03-26 14:29:39
【问题描述】:
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 解决方案?

【问题讨论】:

    标签: javascript node.js functional-programming ramda.js


    【解决方案1】:

    不清楚你想要什么。我见过的大多数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 甚至是一个 pull request。。 p>

    【讨论】:

    • 您提供的 mixinDeep 示例对我来说似乎是合理的,但在实施之前确实值得更多思考......我很高兴为 Ramda 做出贡献,这是一个伟大而有用的库!谢谢。
    猜你喜欢
    • 2017-11-12
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    相关资源
    最近更新 更多