【问题标题】:jquery merge two objectsjquery合并两个对象
【发布时间】:2012-04-25 05:33:59
【问题描述】:

如何将 jquery 对象合并在一起

我有

 {
  "merchantcontract":"Ready Reserve Foods 10104.01",
  "merchantcontractid":"c4253769-5a57-e111-b935-00155d010302",
  "smi_transactiondate":"\/Date(1332140400000)\/",
  "smi_glamount2":15.2600,
  "smi_transactionclass":180870001,
  "smi_transactionclassname":"Residual Agent Commission",
  "smi_contractprodcutidname":"Traditional",
  "smi_agentid":"1d3f44ee-afc3-e011-addf-a4badb1ddef5",
  "smi_primaryagentid":"1d3f44ee-afc3-e011-addf-a4badb1ddef5"
 },

 {
  "merchantcontract":"Ready Reserve Foods 10104.01",
  "merchantcontractid":"c4253769-5a57-e111-b935-00155d010302",
  "smi_transactiondate":"\/Date(1332140400000)\/",
  "smi_glamount2":2.6000,
  "smi_transactionclass":180870001,
  "smi_transactionclassname":"Residual Agent Commission",
  "smi_contractprodcutidname":"Traditional",
  "smi_agentid":"1d3f44ee-afc3-e011-addf-a4badb1ddef5",
  "smi_primaryagentid":"1d3f44ee-afc3-e011-addf-a4badb1ddef5"
     }

我想拥有

     {
      "merchantcontract":"Ready Reserve Foods 10104.01",
      "merchantcontractid":"c4253769-5a57-e111-b935-00155d010302",
      "smi_transactiondate":"\/Date(1332140400000)\/",
      "smi_glamount2":15.2600,
      "smi_transactionclass":180870001,
      "smi_transactionclassname":"Residual Agent Commission",
      "smi_contractprodcutidname":"Traditional",
      "smi_agentid":"1d3f44ee-afc3-e011-addf-a4badb1ddef5",
      "smi_primaryagentid":"1d3f44ee-afc3-e011-addf-a4badb1ddef5"
      },

       {
      "merchantcontract":"Ready Reserve Foods 10104.01",
      "merchantcontractid":"c4253769-5a57-e111-b935-00155d010302",
      "smi_transactiondate":"\/Date(1332140400000)\/",
      "smi_glamount2":2.6000,
      "smi_transactionclass":180870001,
      "smi_transactionclassname":"Residual Agent Commission",
      "smi_contractprodcutidname":"Traditional",
      "smi_agentid":"1d3f44ee-afc3-e011-addf-a4badb1ddef5",
      "smi_primaryagentid":"1d3f44ee-afc3-e011-addf-a4badb1ddef5"
       }

    {"merchantcontract":"Ready Reserve Foods 10104.01"{

      "merchantcontractid":"c4253769-5a57-e111-b935-00155d010302",
      "smi_transactiondate":"\/Date(1332140400000)\/",
      "smi_glamount2":15.2600,
      "smi_transactionclass":180870001,
      "smi_transactionclassname":"Residual Agent Commission",
      "smi_contractprodcutidname":"Traditional",
      "smi_agentid":"1d3f44ee-afc3-e011-addf-a4badb1ddef5",
      "smi_primaryagentid":"1d3f44ee-afc3-e011-addf-a4badb1ddef5"
   },
   {

      "merchantcontractid":"c4253769-5a57-e111-b935-00155d010302",
      "smi_transactiondate":"\/Date(1332140400000)\/",
      "smi_glamount2":2.6000,
      "smi_transactionclass":180870001,
      "smi_transactionclassname":"Residual Agent Commission",
      "smi_contractprodcutidname":"Traditional",
      "smi_agentid":"1d3f44ee-afc3-e011-addf-a4badb1ddef5",
      "smi_primaryagentid":"1d3f44ee-afc3-e011-addf-a4badb1ddef5"
   }
}

所以两个对象都在一个对象之下。我可能有两个以上的对象。

对象是在 jquery 中创建的。

我不知道如何开始。

【问题讨论】:

标签: javascript jquery


【解决方案1】:

jQuery 的 $.extend 会做你想做的事。

//merging two objects into new object
var new_object = $.extend({}, object1, object2);

//merge object2 into object1
$.extend(object1, object2);

【讨论】:

  • 是否可以动态创建新对象并将其添加到父对象。我需要的是所有标题为 A 的对象分组,所有对象的标题为 B 等。在一个新对象中组合在一起。就目前而言,json没有分组。可能有无限组。
  • 是的,一切皆有可能!但是,您不再只是合并对象,因此您必须使用 $.each 或 while/for 循环遍历对象,并将每个 key->value par 与某个键添加到一个新对象,以及所有 par使用另一个对象的不同键等。
【解决方案2】:
anObj={'propone':'1', 'proptwo':'2'};
anotherObj={'propel':'11', 'proptlv':'12'};
var opts = {};
$.extend(opts, anObj, anotherObj, { 
    bar: "baz",
    thing: "foo"
});
console.log(opts);

Example

【讨论】:

    【解决方案3】:

    如果您希望递归合并它们,$.extend 提供参数deep。如果deep=true 合并成为递归。上面的例子,

    // Initialize two objects.
    var json1 = { "a": { "a1": "value1", "a2": "value2" }};
    var json2 = { "a": { "a3": "value3" }};
    
    // Merge them recursively.
    var newJson = $.extend(true, {}, json1, json2);
    
    // Test it.
    if (newJson.a.a1 && newJson.a.a3) {
        console.log("Success");
    }
    

    【讨论】:

      【解决方案4】:

      如果要更新现有对象,请使用:

      $.extend(obj1, obj2); //update obj1 and put all obj2 values in it.
      

      $.extend 将更改现有对象的值

      要创建一个新的第三个对象,它是两个对象的总和,您可以使用此函数

      function merger_objects(obj1,obj2){
        $.each(obj2, function(key, value) {
           obj1[key] = value;    
        });
       return obj1;
      }
      

      示例

      var fruit = {apple:"sweet",graps:"bitter"}
      var vege = {cucamber:"bitter",letuce:"bitter"}
      
      var fruit_and_vege = merger_objects(fruit,vege); 
      //returns {apple:"sweet",graps:"bitter",cucamber:"bitter",letuce:"bitter"}
      

      【讨论】:

        【解决方案5】:

        你能把它们放在一个数组中吗?

        var myObjects = [];
        

        在你的每个创建它们的地方添加:

        myObjects.push(newObject);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-03-30
          • 2018-01-14
          • 2020-02-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-21
          • 2013-04-08
          相关资源
          最近更新 更多