2011-07-22 239 views

回答

1
var o = { 'a':3, 'b': 5 }; 
var n = { 'a': 999, 'c': 10 }; 

for (var key in n){ 
    o[key]=n[key]; 
} 
+3

這應該使用'hasOwnProperty'以避免過多的複製。另外,已有一些圖書館現有的功能可能有助於提及一或兩個。 – 2011-07-22 07:21:10

+0

他想要一個覆蓋,雖然 - 只是檢查hasOwnProperty是不夠的 - 他應該檢查值以及 –

5

如果您使用的是框架,多數有一個功能,將做到這一點,例如jQuery的延伸。否則,如果你在沒有框架的情況下使用JavaScript,你必須自己做。

你可以使用for ... in循環。

for(var key in newObject) 
{ 
    if(!newObject.hasOwnProperty(key)) { 
     continue; 
    } 
    oldObject[key] = newObject[key]; 
} 

作爲一個方面的說明,不要把變量稱爲「新」,它的關鍵字在多個語言中。 Np,如果它只是例子。根據評論的建議,我已經將我的示例中的new從new重新命名爲newObject。

PST的權利,需要檢查for ... in循環的VAR竟是新的

+0

+ 1記住'hasOwnProperty()',但是這不是更簡單的做只是在'if'而不是繼續時,財產沒有找到? – nnnnnn

+0

確實會更簡單,但它並不複雜得多,這種方式具有更易於擴展的額外好處,例如,如果需要深對象合併(合併子對象屬性而不是全部覆蓋)。儘管如此,如果if語句翻轉並圍繞着作業,它會讀得稍微好一些。 –

+0

它確實有一點點風格...我更喜歡單一的流動方法,所以會使用上面的倒置。但是,上面的*會導致語法錯誤*,因爲'new'被當作保留字,並且不會被正確解析。當然,在最初的文章中這是一個糟糕的選擇 - 或許考慮重新命名它併爲將來的讀者添加一個備註:) – 2011-07-22 20:26:10

4

的jQuery提供更好的函數調用$ .extend。 例如:

var old_obj = {'a': 3, 'b': 5}; 
var new_obj = {'a': 999, 'c': 10}; 
var result = $.extend(old_obj, new_obj); 

其結果將是

{a: 999, b: 5, c: 10} 
相關問題