【问题标题】:Copying properties from one object to another with a condition使用条件将属性从一个对象复制到另一个对象
【发布时间】:2016-12-21 13:28:16
【问题描述】:

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

【问题讨论】:

标签: javascript underscore.js assign


【解决方案1】:

使用Object.assign(obj1, obj2);(如果属性存在于后者中),它在 ES6 中是原生的(不需要 underscore.js)。

Object.assign() 方法用于复制所有的值 从一个或多个源对象到目标的可枚举自身属性 目的。它将返回目标对象。 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

【讨论】:

  • "...仅当属性存在于后者中时"。
  • @Vohuman 感谢您的评论我在我的答案中编辑了一个注释以供参考。
【解决方案2】:

一个懒惰的选择是:

_.extend(a, _.pick(b, _.keys(a)));

_.pick 使用 destination 对象的 .keys 过滤 source 对象,并将结果用于扩展 em>目的地对象。

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

_.extend({}, a, _.pick(b, _.keys(a)));

【讨论】:

  • 哈哈,矮但是丑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-08
  • 2022-12-04
  • 2018-02-01
  • 2016-10-13
  • 1970-01-01
相关资源
最近更新 更多