spa*_*y02 11 javascript lodash
我需要做一些像_.assign这样的事情,但前提是目标对象已经分配了属性.可以想象它就像源对象可能有一些属性要贡献,但也有一些我不想混入的属性.
我没有使用_.assign的回调机制,但尝试了以下内容.它"工作",但它仍然将属性分配给dest对象(未定义).我根本不希望它分配.
_.assign(options, defaults, initial, function (destVal, sourceVal) {
return typeof destVal == 'undefined' ? undefined : sourceVal;
});
Run Code Online (Sandbox Code Playgroud)
我写了以下函数来做到这一点,但想知道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);
}
Run Code Online (Sandbox Code Playgroud)
ne8*_*8il 21
您可以从第一个对象中获取密钥
var firstKeys = _.keys(options);
Run Code Online (Sandbox Code Playgroud)
然后从第二个对象中获取一个子集对象,仅获取第一个对象上存在的那些键:
var newDefaults = _.pick(defaults, firstKeys);
Run Code Online (Sandbox Code Playgroud)
然后使用该新对象作为您的参数_.assign:
_.assign(options, newDefaults);
Run Code Online (Sandbox Code Playgroud)
或者在一行中:
_.assign(options, _.pick(defaults, _.keys(options)));
Run Code Online (Sandbox Code Playgroud)
我在这里测试时似乎工作:http://jsbin.com/yiyerosabi/1/edit?js,console
| 归档时间: |
|
| 查看次数: |
9428 次 |
| 最近记录: |