javascript - Ramda 不提供深度 mixin 吗?

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

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 甚至是 pull request

关于javascript - Ramda 不提供深度 mixin 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28179563/

相关文章:

javascript - 开放层 3 : draw arrow on multi line

javascript - 如何使用 jQuery 将双引号内的破折号 html 元素作为目标?

javascript - grunt-ng-constant 不生成配置脚本

.net - F# 中不可变记录类型的复制和更新是共享还是复制内存?

javascript - JavaScript 是否支持偏函数应用?

javascript - 绘制多个数据表时速度很慢

javascript - Angularjs Typescript Controller 继承和依赖注入(inject)

node.js - 使用opencv和node比较2张人脸的相似度

python - 在 Node.js 服务器上运行 Python 脚本时出错

typescript - fp-ts在mapLeft内部调用异步函数