2014-02-25 45 views
0

在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

角有這個建於嘗試:

angular.copy(updatedObject, originalObject); 

這將做一個可愛的深拷貝,原始對象上取代一切。

+0

先生,您是一位紳士和學者。我不敢相信我不知道那是存在的。 – JHixson