使用条件将属性从一个对象复制到另一个对象
Copying properties from one object to another with a condition
Lazy-me 想知道是否有更好的方法将一个对象(源)中的属性复制到另一个对象(目标),前提是后者存在属性?它不一定必须使用下划线。
例如,
_.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
使用 Object.assign(obj1, obj2);
(如果属性存在于后者)这是 ES6 原生的(不需要 underscore.js)。
The Object.assign() method is used to copy the values of all
enumerable own properties from one or more source objects to a target
object. It will return the target object. 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);
或者使用undescore.js
_.extend(destination, *sources)
或
_.extendOwn(destination, *sources)
详细信息可以在这里找到:
http://underscorejs.org/#extend
一个懒惰的选项是:
_.extend(a, _.pick(b, _.keys(a)));
_.pick
使用 destination 的 .keys
过滤 source 对象 对象,结果用于扩展 destination 对象。
如果您不想修改原始对象,只需将一个空对象传递给 _.extend
函数即可。
_.extend({}, a, _.pick(b, _.keys(a)));
Lazy-me 想知道是否有更好的方法将一个对象(源)中的属性复制到另一个对象(目标),前提是后者存在属性?它不一定必须使用下划线。
例如,
_.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
使用 Object.assign(obj1, obj2);
(如果属性存在于后者)这是 ES6 原生的(不需要 underscore.js)。
The Object.assign() method is used to copy the values of all enumerable own properties from one or more source objects to a target object. It will return the target object. 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);
或者使用undescore.js
_.extend(destination, *sources)
或
_.extendOwn(destination, *sources)
详细信息可以在这里找到: http://underscorejs.org/#extend
一个懒惰的选项是:
_.extend(a, _.pick(b, _.keys(a)));
_.pick
使用 destination 的 .keys
过滤 source 对象 对象,结果用于扩展 destination 对象。
如果您不想修改原始对象,只需将一个空对象传递给 _.extend
函数即可。
_.extend({}, a, _.pick(b, _.keys(a)));