使用条件将属性从一个对象复制到另一个对象

Mik*_*key 6 javascript underscore.js assign

懒惰我想知道是否有更好的方法将一个对象(源)中的属性复制到另一个对象(目标),只有在后者中存在属性时?它不一定要使用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
Run Code Online (Sandbox Code Playgroud)

Gib*_*boK 5

使用Object.assign(obj1, obj2);ES6 原生的(如果属性存在于后者)(不需要 underscore.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);
Run Code Online (Sandbox Code Playgroud)

或者使用 undescore.js

_.extend(destination, *sources)

或者

_.extendOwn(destination, *sources)

详细信息可以在这里找到:http ://underscorejs.org/#extend

  • “...仅当属性存在于后者时”。 (2认同)

und*_*ned 4

一种懒惰的选择是:

_.extend(a, _.pick(b, _.keys(a)));
Run Code Online (Sandbox Code Playgroud)

_.pick使用目标对象的过滤源对象,结果用于扩展目标对象.keys

如果您不想修改原始对象,只需将空对象传递给函数即可_.extend

_.extend({}, a, _.pick(b, _.keys(a)));
Run Code Online (Sandbox Code Playgroud)