将两个对象合并成一个。

5
在JavaScript中,我想将两个对象合并成一个。我得到了:
{
  test: false,
  test2: false
}

并且。
{
  test2: true
}

我尝试使用$.extend$.merge,但是得到的输出结果为:
{
  test2: true
}

如何获得像这样的输出
{
  test: false,
  test2: true
}

编辑:实际上我有嵌套对象。我需要将ab结合起来,如下所示:

var a = { test: false, test2: { test3: false, test4: false } };
var b = { test2: { test4: true } };
// desired combined result:
{ test: false, test2: { test3: false, test4: true } }

但是我得到的实际结果会将嵌套的test2对象中的test3移除。


3
$.extend()应该是可用的。请展示你尝试过的代码。 - yoavmatchulsky
最终对象获得test2: true的规则是什么,而不是test2: false? - André Alçada Padez
我需要的是 var a = { test: false, test2: { test3: false, test4: false } };var b = { test2: { test4: true } }; 并且得到 { test: false, test2: { test3: false, test4: true } },但我得到的是test3被删除了。 - debianek
1个回答

10
var a = {
    test: false,
    test2: false
};

var b = {
    test2: true
};

var c = $.extend(a, b);

这将用以下结果覆盖对象a上的所有属性:

{
    test: false,
    test2: true
}
如果你想要一个新的、全新的对象,就像这样调用 .extend
var c = $.extend({}, a, b);

这段代码将完成相同的工作,但是它不会改变对象 a 并创建一个新对象。请查看http://api.jquery.com/jQuery.extend/


更新

在您的评论中,您更新了对象结构。那么,您需要的是所谓的 "深克隆"。这只是传递给$.extend()调用的另一个参数,示例如下:

var c = $.extend(true, a, b); // a gets overwritten
var c = $.extend(true, {}, a, b); // new object is created

嗨,是的,它可以工作,我放了一个错误的例子,我需要的是var a = { test: false, test2: { test3: false, test4: false } };var b = { test2: { test4: true } }; 并获得{ test: false, test2: { test3: false, test4: true } },但我得到的是test3被删除了。 - debianek

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