Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript lodash中的类内合并_Javascript_Node.js_Merge_Lodash - Fatal编程技术网

Javascript lodash中的类内合并

Javascript lodash中的类内合并,javascript,node.js,merge,lodash,Javascript,Node.js,Merge,Lodash,我正在尝试在node.js中与lodash进行对象合并。合并非常有效,因为它不会覆盖导致未定义的属性对象 但是,我希望它只覆盖目标对象中存在的对象。见下例: var e1 = { name: 'Jack', surname: 'Root' }; 合并 var e2 = { name: 'Rex', surname: undefined, age: 24 }; 当前结果: { name: 'Rex', surname: 'Root',

我正在尝试在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'
}
因此,我试图得到的是,源对象仅覆盖这两个对象中存在的属性,并且仅当它们未定义时

我尝试搜索其他函数,但只发现mergeassign可以执行类似的操作。但遗憾的是,这并不是我想要的

这背后的整个想法是构建一些方法,从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];
}
您可以使用

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);

很不错的!!简单有效。还可以重新考虑这一点,甚至深入到子属性。