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/