如何将一个javascript对象添加到已有的javascript对象中?

3
var old = { 'a':3, 'b': 5 }
var new = { 'a': 999, 'c': 10 }

如何将“new”添加到“old”并得到以下结果:
{ 'a': 999, 'b': 5, 'c': 10 }
3个回答

5
如果你使用框架,大多数都有一个函数可以实现它,比如jQuery的extend。否则,如果你使用没有框架的JavaScript,你就需要自己做了。
你可以使用for...in循环来实现。
for(var key in newObject)
{
    if(!newObject.hasOwnProperty(key)) {
         continue;
    }
    oldObject[key] = newObject[key];
}

作为附注,请不要将变量称为“new”,因为在多种语言中它是一个关键字。如果仅用于示例,则无需担心。根据评论的建议,我已将其从“new”重命名为“newObject”。
Psts正确,需要在for...in循环中检查变量是否实际上是“new”的。

记住hasOwnProperty()是个好习惯,但如果属性不存在时直接在if语句中进行赋值不是更简单吗? - nnnnnn
确实会更简单,但这种方式并不复杂,采用这种方式的额外好处是更容易扩展,例如,如果需要进行深度对象合并(合并子对象属性而不是完全覆盖)。尽管目前这种情况下 if 语句倒置并围绕赋值语句会使代码可读性略有提高。 - Steve Elliott
确实,这在很大程度上取决于风格...我更喜欢单一的流程方法,因此会使用上述的倒置。然而,上述方法将导致语法错误,因为new被视为保留字,将阻止其正确解析。尽管最初的帖子选择不佳 - 也许考虑重命名并为未来的读者添加注释 :) - user166390
包含关于使用“new”作为变量名不是一个好主意的一点,认为最好将示例保持更接近他最初的示例。目前在移动站点上,稍后会更新代码。 - Steve Elliott

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}

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

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

3
为避免复制过多内容,建议使用 hasOwnProperty。另外,已经有一些库中存在相关函数可供使用...可能值得提及其中一两个。 - user166390
他希望进行覆盖操作,所以仅仅检查hasOwnProperty是不够的,他还应该检查值。 - Petar Ivanov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接