我的需要是执行类似 _.assign 的操作,但前提是目标对象已经具有正在分配的属性。可以将其想象为源对象可能具有一些可以贡献的属性,但也有一些我不想混合的属性。
我从未使用过 _.assign 的回调机制,但尝试了以下方法。它“有效”,但它仍然将该属性分配给 dest 对象(未定义)。我根本不想让它分配。
_.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);
}
您可以只从第一个对象中获取键
var firstKeys = _.keys(options);
然后从第二个对象中获取子集对象,仅获取第一个对象上存在的那些键:
var newDefaults = _.pick(defaults, firstKeys);
然后使用这个新对象作为你的参数_.assign
:
_.assign(options, newDefaults);
或者在一行中:
_.assign(options, _.pick(defaults, _.keys(options)));
当我在这里测试时似乎有效:http://jsbin.com/yiyerosabi/1/edit?js,控制台 http://jsbin.com/yiyerosabi/1/edit?js,console
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)