内部像 lodash 中的合并
inner like merge in lodash
我正在尝试在 node.js 中将对象与 lodash 合并。合并效果很好,因为它不会覆盖导致未定义的 属性 个对象。
但是我希望它只覆盖目标对象中存在的对象。请参见下面的示例:
var e1 = {
name: 'Jack',
surname: 'Root'
};
合并
var e2 = {
name: 'Rex',
surname: undefined,
age: 24
};
当前结果:
{
name: 'Rex',
surname: 'Root',
age: 24
}
我想要的结果:
{
name: 'Rex',
surname: 'Root'
}
所以我想要得到的是源对象只覆盖两者都存在的属性,并且只有当它们不是未定义的时候。
我尝试搜索其他函数,但只发现 merge 和 assign 可以做类似的事情。但可惜这不是我想要的。
这背后的整个想法是构建一些方法,从 Web 表单中获取对象字段,然后将它们绑定到 mongoose.js 模型对象以进行持久化。
这是为了避免总是必须手动将每个 属性 绑定到另一个对象。
我想不出一个非常方便的方法来使用 lodash 方法来做到这一点,但使用 vanilla 并不难:
// Only loop over e1 values
for (var e1k in e1) {
// Use e2 value if it exists, otherwise stick with what is already there
e1[e1k] = e2[e1k] || e1[e1k];
}
您可以使用 _.mapValues:
var e1 = {
name: 'Jack',
surname: 'Root'
};
var e2 = {
name: 'Rex',
surname: undefined,
age: 24
};
var result = _.mapValues(e1, function (n, e) {
return e2[e] || n;
});
console.log(result);
我正在尝试在 node.js 中将对象与 lodash 合并。合并效果很好,因为它不会覆盖导致未定义的 属性 个对象。
但是我希望它只覆盖目标对象中存在的对象。请参见下面的示例:
var e1 = {
name: 'Jack',
surname: 'Root'
};
合并
var e2 = {
name: 'Rex',
surname: undefined,
age: 24
};
当前结果:
{
name: 'Rex',
surname: 'Root',
age: 24
}
我想要的结果:
{
name: 'Rex',
surname: 'Root'
}
所以我想要得到的是源对象只覆盖两者都存在的属性,并且只有当它们不是未定义的时候。
我尝试搜索其他函数,但只发现 merge 和 assign 可以做类似的事情。但可惜这不是我想要的。
这背后的整个想法是构建一些方法,从 Web 表单中获取对象字段,然后将它们绑定到 mongoose.js 模型对象以进行持久化。
这是为了避免总是必须手动将每个 属性 绑定到另一个对象。
我想不出一个非常方便的方法来使用 lodash 方法来做到这一点,但使用 vanilla 并不难:
// Only loop over e1 values
for (var e1k in e1) {
// Use e2 value if it exists, otherwise stick with what is already there
e1[e1k] = e2[e1k] || e1[e1k];
}
您可以使用 _.mapValues:
var e1 = {
name: 'Jack',
surname: 'Root'
};
var e2 = {
name: 'Rex',
surname: undefined,
age: 24
};
var result = _.mapValues(e1, function (n, e) {
return e2[e] || n;
});
console.log(result);