将两个 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 — 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'  ]

【讨论】:

我认为它是在做交集而不是联合。 没有它正在做联合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);
&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);

【讨论】:

如果您想在帖子中表示感谢,您可以点击帖子旁边的向上箭头。

以上是关于将两个 json/javascript 数组合并为一个数组的主要内容,如果未能解决你的问题,请参考以下文章

将两个一维字符串数组合并为一个带分隔符的数组

PHP 将两个关联数组合并为一个数组

将两个数组(键和值)合并为一个对象[重复]

PHP - 将两个数组(相同长度)合并为一个关联?

将两个列数组合并为配置单元中的 1 个数组列

如何将数组的两个对象合并为一个?