将两个json / javascript数组合并到一个数组中

时间:2012-04-30 13:52:06

标签: javascript jquery json

我有两个json数组,比如

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

我希望他们合并到单个数组

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

此致

10 个答案:

答案 0 :(得分:112)

您需要concat方法。

var finalObj = json1.concat(json2);

答案 1 :(得分:37)

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

您所寻求的是一个简单的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

答案 2 :(得分:21)

您可以尝试合并

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

答案 3 :(得分:5)

因为你正在使用jQuery。 jQuery.extend()方法怎么样?

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

  

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

答案 4 :(得分:2)

您可以使用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' } ]

答案 5 :(得分:1)

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

var finalObj =[json1 , json2]

答案 6 :(得分:0)

您可以使用 Lodash import { Component,ViewChild } from '@angular/core'; import { EmployeeService } from './employee.service'; import {NgForm} from '@angular/forms'; @ViewChild('myForm') myForm:any; constructor(public employeeService: EmployeeService) { } ngOnInit() { this.resetForm(this.myForm); } resetForm(form?: NgForm) { if (form) { form.reset(); this.employeeService.selectedEmployee = { name: '', position: '', office: '', salary: null }; } } 函数来实现。

_.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);

答案 7 :(得分:0)

如果使用es6,则可以使用新的js传播运算符:

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

console.log(finalObj)

答案 8 :(得分:-1)

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

var json1 = {"name":"ramesh","age":"12"};

var json2 = {"member":"true"};

document.write(JSON.stringify($.extend(true,{},json1,json2)))

答案 9 :(得分:-3)

var json1=["Chennai","Bangalore"];
var json2=["TamilNadu","Karanataka"];

finaljson=json1.concat(json2);