【问题标题】:Combine two object into one将两个对象合二为一
【发布时间】:2012-01-31 11:44:46
【问题描述】:

在 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

【问题讨论】:

  • $.extend() 应该可以工作。显示您尝试过的代码。
  • 最终对象获取test2: true而不是test2: false的规则是什么?
  • 我需要的是 var a = { test: false, test2: { test3: false, test4: false } }; var b = { test2: { test4: true } };并得到 { test: false, test2: { test3: false, test4: true } } 但我得到 test3 后删除

标签: javascript jquery


【解决方案1】:
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 后删除
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-19
  • 2015-12-30
相关资源
最近更新 更多