【问题标题】:Merge two json/javascript arrays in to one array将两个 json/javascript 数组合并为一个数组
【发布时间】:2012-05-10 05:18:37
【问题描述】:

我有两个类似的 json 数组

var json1 = [{id:1, name: 'xxx' ...}]
var json2 = [{id:2, name: 'xyz' ...}]

我希望它们合并到单个数组中

var finalObj = [{id:1, name: 'xxx' ...},{id:2, name: 'xyz' ...}]

【问题讨论】:

  • 它的动态。所以我不能使用索引。我需要一个可以将 n 个对象合并为最终对象的函数。
  • 那些不是 JSON 对象,只是数组。
  • @MurtazaHussain 如果您的代码如上所示,我的评论是正确的。
  • @Quentin [ { "id": 1, "name": 6 } ] 例如是普通的 json
  • @Royi Namir — 不,您可以将数组序列化为 JSON,但这只是一个数组。 (数组内对象的语法无论如何都不符合 JSON 标准)。

标签: javascript jquery json


【解决方案1】:

您想要concat 方法。

var finalObj = json1.concat(json2);

【讨论】:

  • @kushdilip — json1json2 数组! (每个都有一个成员,是一个对象)
【解决方案2】:

在第一次出现时,“merg”这个词会让人认为您需要使用.extend,这是“合并”JSON 对象的正确 jQuery 方式。但是,$.extend(true, {}, json1, json2); 将导致共享相同键名的所有值被参数中提供的最新值覆盖。正如对您问题的审查所示,这是不受欢迎的。

您需要的是一个简单的 JavaScript 函数,称为 .concat。这会像:

var finalObj = json1.concat(json2);

虽然这不是原生 jQuery 函数,但您可以轻松地将其添加到 jQuery 库中以供将来使用,如下所示:

;(function($) {
    if (!$.concat) {
        $.extend({
            concat: function() {
                return Array.prototype.concat.apply([], arguments);
            }
        });
    }
})(jQuery);

然后根据需要调用它,例如:

var finalObj = $.concat(json1, json2);

您也可以将它用于这种类型的多个数组对象,例如:

var finalObj = $.concat(json1, json2, json3, json4, json5, ....);

如果你真的想要它 jQuery 风格并且非常简短和甜美(又名缩小)

;(function(a){a.concat||a.extend({concat:function(){return Array.prototype.concat.apply([],arguments);}})})(jQuery);

;(function($){$.concat||$.extend({concat:function(){return Array.prototype.concat.apply([],arguments);}})})(jQuery);

$(function() {
    var json1 = [{id:1, name: 'xxx'}],
        json2 = [{id:2, name: 'xyz'}],
        json3 = [{id:3, name: 'xyy'}],
        json4 = [{id:4, name: 'xzy'}],
        json5 = [{id:5, name: 'zxy'}];
    
    console.log(Array(10).join('-')+'(json1, json2, json3)'+Array(10).join('-'));
    console.log($.concat(json1, json2, json3));
    console.log(Array(10).join('-')+'(json1, json2, json3, json4, json5)'+Array(10).join('-'));
    console.log($.concat(json1, json2, json3, json4, json5));
    console.log(Array(10).join('-')+'(json4, json1, json2, json5)'+Array(10).join('-'));
    console.log($.concat(json4, json1, json2, json5));
});
center { padding: 3em; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<center>See Console Log</center>

jsFiddle

【讨论】:

  • 这里使用jquery有什么好处?我认为直接使用concat 是正确的选择。
  • @Vojta 正如开头所解释的那样。我只是展示了如何扩展 jQuery 以包含该方法。
  • 这种情况下也可以写var finalObj = [].concat(json1, json2, json3, json4, json5, ....);
  • jQuery 在这里没有提供任何价值。
【解决方案3】:

你可以试试合并

var finalObj = $.merge(json1, json2);

【讨论】:

    【解决方案4】:

    由于您使用的是 jQuery。 jQuery.extend() 方法怎么样?

    http://api.jquery.com/jQuery.extend/

    描述:将两个或多个对象的内容合并到第一个对象中。

    【讨论】:

      【解决方案5】:

      您可以使用 Es 6 的新功能来做到这一点:

      var json1 = [{id:1, name: 'xxx' , ocupation : 'Doctor' }];
      
      var json2 = [{id:2, name: 'xyz' ,ocupation : 'SE'}];
      
      var combineJsonArray = [...json1 , ...json2];
      
      //output should like this [ { id: 1, name: 'xxx', ocupation: 'Doctor' },
        { id: 2, name: 'xyz', ocupation: 'SE' } ]
      

      或者您可以在两个 json 数组之间放置额外的字符串或任何内容:

      var json3 = [...json1 ,"test", ...json2];
      
      // output should like this : [ { id: 1, name: 'xxx', ocupation: 'Doctor' },
        'test',
        { id: 2, name: 'xyz', ocupation: 'SE' } ]
      

      【讨论】:

      【解决方案6】:

      也许,你可以使用javascript的数组语法:

      var finalObj =[json1 , json2]
      

      【讨论】:

      • 完美运行。谢谢你。不知何故 concat 不再为我工作了,尽管它工作了大约 2 年。但是这里的这个却有效。疯狂的世界。 :)
      【解决方案7】:

      您可以使用 Lodash _.merge 函数实现此目的。

      var json1 = [{id:1, name: 'xxx'}];
      var json2 = [{id:2, name: 'xyz'}];
      var merged = _.merge(_.keyBy(json1, 'id'), _.keyBy(json2, 'id'));
      var finalObj = _.values(merged);
      
      console.log(finalObj);
      &lt;script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"&gt;&lt;/script&gt;

      【讨论】:

        【解决方案8】:

        如果使用 es6,可以使用新的 js 扩展运算符:

        var json1 = [{id:1, name: 'xxx'}]
        var json2 = [{id:2, name: 'xyz'}]
        var finalObj = [...json1, ...json2]
        
        console.log(finalObj)

        【讨论】:

          【解决方案9】:

          试试下面的代码,使用 jQuery 扩展方法:

          var json1 = {"name":"ramesh","age":"12"};
          
          var json2 = {"member":"true"};
          
          document.write(JSON.stringify($.extend(true,{},json1,json2)))
          

          【讨论】:

          • 他需要合并对象的数组,你的答案没有这样做,你能详细说明/修改它吗?
          【解决方案10】:
          var json1=["Chennai","Bangalore"];
          var json2=["TamilNadu","Karanataka"];
          
          finaljson=json1.concat(json2);
          

          【讨论】:

          • 如果您想在帖子中表示感谢,您可以点击帖子旁边的向上箭头。
          猜你喜欢
          • 2019-08-30
          • 2021-07-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-11
          • 1970-01-01
          • 2016-11-12
          • 2020-06-22
          相关资源
          最近更新 更多