我的需要是做类似 _.assign 的事情,但前提是目标对象已经具有正在分配的属性。把它想象成源对象可能有一些属性可以贡献,但也有一些我不想混入的属性。
我从未使用过 _.assign 的回调机制,但尝试了以下方法。它“有效”,但它仍然将该属性分配给目标对象(未定义)。我根本不希望它分配。
_.assign(options, defaults, initial, function (destVal, sourceVal) {
return typeof destVal == 'undefined' ? undefined : sourceVal;
});
我编写了以下函数来执行此操作,但想知道 lodash 是否已经内置了一些更优雅的东西。
function softMerge (dest, source) {
return Object.keys(dest).reduce(function (dest, key) {
var sourceVal = source[key];
if (!_.isUndefined(sourceVal)) {
dest[key] = sourceVal;
}
return dest;
}, dest);
}
原文由 sparty02 发布,翻译遵循 CC BY-SA 4.0 许可协议
你可以只拿第一个对象的键
然后从第二个对象中获取一个子集对象,只获取第一个对象上存在的那些键:
然后使用该新对象作为
_.assign
的参数:或者在一行中:
当我在这里测试时似乎有效:http: //jsbin.com/yiyerosabi/1/edit ?js,console