Javascript / jQuery - 从另一个对象更新对象

时间:2016-04-28 19:14:16

标签: javascript jquery angularjs

我有一个复杂而深入的对象storedData.Department,AngularJS正在使用它。当需要在UI中反映的更改发生时,我使用jQuery' s $.extend()将更改合并到从XHR返回的新对象的现有对象中:

$.extend(true, storedData.Department, res.data.Department);

当更改为添加时,此功能非常有用。不幸的是,任何减法的更改都不会从storedData.Department中删除。

我只需使用更新的对象覆盖storedData.Department对象,但与$.extend相比,这会导致性能显着下降。

如何有选择地更新storedData.Department,只添加和删除res.data.Department中已更改的内容?解决方案需要具有合理的性能。

1 个答案:

答案 0 :(得分:0)

您可以使用delete删除原始对象上不属于XHR调用返回的对象的属性。它只是删除object.property。您必须遍历每个对象上的属性以确定存在的内容,但这应该是非常高效的。

实际上,在一个循环中,语法更像是这样:删除对象[propertyName]可能就是这样。

这样的事情应该非常接近。 (我还没有测试过它。)

function mirror(source, target) {
    // assign all property values from the source to the target.
    for (var prop in source) {
         target[prop] = source[prop];
    };
    // remote any properties present on the target that aren't in the source.
    for (var prop in target) {
        if (! source[prop]) {
            delete target[prop];
        }
    };
};