[英]Copying properties from one object to another with a condition
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
使用Object.assign(obj1, obj2);
(如果屬性存在於后者中),這在ES6中是原生的(不需要下划線.js)。
Object.assign()方法用於將所有可枚舉自身屬性的值從一個或多個源對象復制到目標對象。 它將返回目標對象。 更多信息在這里 。
例:
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
一個懶惰的選擇是:
_.extend(a, _.pick(b, _.keys(a)));
_.pick
通過使用過濾源對象.keys
目標對象和所述結果用於延伸目標對象。
如果您不想修改原始對象,只需將空對象傳遞給_.extend
函數即可。
_.extend({}, a, _.pick(b, _.keys(a)));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.