我有一个复杂而深入的对象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
中已更改的内容?解决方案需要具有合理的性能。
答案 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];
}
};
};