将两个 json/javascript 数组合并为一个数组
Posted
技术标签:
【中文标题】将两个 json/javascript 数组合并为一个数组【英文标题】:Merge two json/javascript arrays in to one array 【发布时间】: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 标准)。
【参考方案1】:
您想要concat
方法。
var finalObj = json1.concat(json2);
【讨论】:
@kushdilip —json1
和 json2
是数组! (每个都有一个成员,是一个对象)【参考方案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' ]
【讨论】:
我认为它是在做交集而不是联合。 没有它正在做联合2ality.com/2015/01/es6-set-operations.html你可以检查这个linl【参考方案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);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>
【讨论】:
【参考方案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);
【讨论】:
如果您想在帖子中表示感谢,您可以点击帖子旁边的向上箭头。以上是关于将两个 json/javascript 数组合并为一个数组的主要内容,如果未能解决你的问题,请参考以下文章