Lazy-me想知道是否有更好的方法将一个对象(源)中的属性复制到另一个对象(目标),只有后者存在属性?它不一定必须使用Underscore。
例如,
_.mixin({
assign: function (o, destination, source) {
for (var property in source) {
if (destination.hasOwnProperty(property)) {
destination[property] = source[property];
}
}
return destination;
}
});
console.log( _().assign({ a: 1, b: 2, d: 3 }, { a: 4, c: 5 }) ) // a: 4, b: 2, d: 3
答案 0 :(得分:4)
使用Object.assign(obj1, obj2);
(如果属性存在于后者中),这是ES6中的原生属性(不需要下划线.js)。
Object.assign()方法用于复制all的值 枚举从一个或多个源对象到目标的自有属性 宾语。它将返回目标对象。 More info here
示例:
var o1 = { a: 1 };
var o2 = { b: 2 };
var o3 = { c: 3 };
var obj = Object.assign(o1, o2, o3);
console.log(obj);

或者使用unexcore.js
_.extend(destination, *sources)
或
_.extendOwn(destination, *sources)
可在此处找到详细信息: http://underscorejs.org/#extend
答案 1 :(得分:3)
一个懒惰的选择是:
_.extend(a, _.pick(b, _.keys(a)));
_.pick
使用目标对象的 .keys
过滤源对象,并使用结果用于扩展目标对象。
如果您不想修改原始对象,只需将空对象传递给_.extend
函数。
_.extend({}, a, _.pick(b, _.keys(a)));