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.
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.