修改现有对象以匹配该对象的更新版本

时间:2014-02-25 20:46:25

标签: javascript angularjs recursion

在JavaScript中,我有一个对象。正在跟踪对该对象的更改(我正在使用AngularJS)。

在AngularJS的服务中,我收到了该对象的更新版本。我不知道它有什么变化,我不知道这个对象的模型,我只知道:

1)这两个对象具有相同的模型(尽管模型中的数组可能会增加或减少)

2)如果我将旧对象的引用更改为新对象,AngularJS将(可以理解)无法更新前端以反映新对象,因为旧对象上的所有手表都已损坏。

所以,我想:“好吧,我只是将更新后的对象中的所有值复制到新的对象上!”这非常有效。但是,我无法正确使用我的配方,所以我想我会请求一些帮助。请注意,这些是未知的,虽然相同的模型的复杂对象:

 var makeEqual = function(originalObject, updatedObject){
    for (var key in originalObject) {
        if (typeof originalObject[key] == "object"
            && originalObject.hasOwnProperty(key)) {
            makeEqual(originalObject[key], updatedObject[key]);
        }
        else{
            originalObject[key] = updatedObject[key];
        }
    };       
}

但是,到目前为止,我有以下问题。如果updateObject是数组,则不会添加新元素。删除的元素也不会被删除(我认为,不确定)。请注意,该数组可以是子对象数组。

老实说,我觉得除了我自己检测到的问题外,还有其他问题,所以我问:我怎样才能创建这个“深层复制到现有对象”功能?

1 个答案:

答案 0 :(得分:1)

angular内置了这个。尝试:

angular.copy(updatedObject, originalObject);

这将做一个可爱的深层复制,替换原始对象上的所有内容。