我有两个 json 数组
var json1 = [{id:1, name: 'xxx' ...}] var json2 = [{id:2, name: 'xyz' ...}]
我希望它们合并到单个数组中
var finalObj = [{id:1, name: 'xxx' ...},{id:2, name: 'xyz' ...}]
第一次出现时,“ merge”这个词会让人觉得需要使用 。延伸,这是“合并”JSON 对象的正确 jQuery 方式。但是,$.extend(true, {}, json1, json2);将导致共享相同密钥名的所有值被参数中提供的最新值覆盖。回顾一下你的问题就会发现,这是不受欢迎的。
$.extend(true, {}, json1, json2);
你需要的是一个简单的 javascript 函数,名为 。连接,它的工作原理如下:
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?
Http://api.jquery.com/jquery.extend/
描述: 将两个或多个对象的内容合并到第一个对象中。
您需要 concat方法。
concat
你可以试试合并
var finalObj = $.merge(json1, json2);
也许,你可以使用 javascript 的数组语法:
var finalObj =[json1 , json2]
尝试下面的代码,使用 jQuery 扩展方法:
var json1 = {"name":"ramesh","age":"12"}; var json2 = {"member":"true"}; document.write(JSON.stringify($.extend(true,{},json1,json2)))
var json1=["Chennai","Bangalore"]; var json2=["TamilNadu","Karanataka"]; finaljson=json1.concat(json2);
您可以使用 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' } ]
您可以使用 Lodash _.merge函数来实现这一点。
_.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);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>
如果使用 es6,您可以使用新的 js 传播操作符:
var json1 = [{id:1, name: 'xxx'}] var json2 = [{id:2, name: 'xyz'}] var finalObj = [...json1, ...json2] console.log(finalObj)