2011-07-22 230 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} 
相关问题