var old = { 'a':3, 'b': 5 }
var new = { 'a': 999, 'c': 10 }
我怎麼追加「新」「舊」,並導致:如何將javascript對象添加到現有的javascript對象?
{ 'a': 999, 'b': 5, 'c': 10 }
var old = { 'a':3, 'b': 5 }
var new = { 'a': 999, 'c': 10 }
我怎麼追加「新」「舊」,並導致:如何將javascript對象添加到現有的javascript對象?
{ 'a': 999, 'b': 5, 'c': 10 }
var o = { 'a':3, 'b': 5 };
var n = { 'a': 999, 'c': 10 };
for (var key in n){
o[key]=n[key];
}
如果您使用的是框架,多數有一個功能,將做到這一點,例如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竟是新的
+ 1記住'hasOwnProperty()',但是這不是更簡單的做只是在'if'而不是繼續時,財產沒有找到? – nnnnnn
確實會更簡單,但它並不複雜得多,這種方式具有更易於擴展的額外好處,例如,如果需要深對象合併(合併子對象屬性而不是全部覆蓋)。儘管如此,如果if語句翻轉並圍繞着作業,它會讀得稍微好一些。 –
它確實有一點點風格...我更喜歡單一的流動方法,所以會使用上面的倒置。但是,上面的*會導致語法錯誤*,因爲'new'被當作保留字,並且不會被正確解析。當然,在最初的文章中這是一個糟糕的選擇 - 或許考慮重新命名它併爲將來的讀者添加一個備註:) – 2011-07-22 20:26:10
的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}
這應該使用'hasOwnProperty'以避免過多的複製。另外,已有一些圖書館現有的功能可能有助於提及一或兩個。 – 2011-07-22 07:21:10
他想要一個覆蓋,雖然 - 只是檢查hasOwnProperty是不夠的 - 他應該檢查值以及 –