2012-04-30 11 views
61

Ich habe zwei json Arrays wieMerge zwei json/JavaScript-Arrays in einem Array

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

Ich möchte sie einzelne Arrays fusionieren in

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

Grüße

+0

seine Dynamik. also kann ich den Index nicht benutzen. Ich brauche eine Funktion, die n Objekte in das endgültige Objekt zusammenführen kann. –

+6

Das sind keine JSON-Objekte, nur Arrays. – Quentin

+0

@MurtazaHussain Wenn Ihr Code wie oben gezeigt ist, ist mein Kommentar richtig. –

Antwort

98

Sie möchten die concat Methode.

var finalObj = json1.concat(json2); 
+5

+1 für die Verwendung einer ES3-Funktion. –

+17

concat ist für JSON-Arrays, keine JSON-Objekte – kushdilip

+4

@Kushdilip - 'Json1' und' Json2' ** sind ** Arrays! (Jeder hat ein Mitglied, das ein Objekt ist) – Quentin

35

Beim ersten Auftreten, Das Wort "merg" führt zu der Annahme, dass Sie .extend verwenden müssen, was die richtige jQuery-Methode ist, um JSON-Objekte zu "verschmelzen". $.extend(true, {}, json1, json2); wird jedoch dazu führen, dass alle Werte, die denselben Schlüsselnamen verwenden, von den zuletzt in den Parametern angegebenen Schlüsseln überschrieben werden. Wie die Überprüfung Ihrer Frage zeigt, ist dies unerwünscht.

Was Sie suchen, ist eine einfache JavaScript-Funktion bekannt als .concat. Welche wie funktionieren würde:

var finalObj = json1.concat(json2); 

Zwar ist dies nicht eine native Funktion jQuery ist, könnten Sie leicht in die für einfache zukünftige Verwendung jQuery-Bibliothek hinzufügen, wie folgt:

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

Und dann erinnern, wie gewünscht wie:

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

Sie können es auch verwenden, für mehrere Array-Objekte dieses Typs mit einem wie:

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

Und wenn Sie wirklich wollen, dass es jQuery Stil und sehr kurz und süß (aka minimierte)

;(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

+1

Was ist der Vorteil von jQuery hier? Ich denke, mit 'concat' direkt ist die richtige Wahl. – Vojta

+1

@Vojta Wie eingangs erläutert. Ich habe einfach gezeigt, wie man jQuery um die Methode erweitern kann. – SpYk3HH

+1

Sie können auch 'var finalObj = [] .concat (json1, json2, json3, json4, json5, ....) schreiben;' in diesem Fall – Vojta

5

Da Sie jQuery verwenden. Wie steht es mit der Methode jQuery.extend()?

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

Beschreibung: Führen Sie die Inhalte von zwei oder mehr Objekte zusammen in das erste Objekt.

21

Sie versuchen

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

Die .concat Funktion funktionierte nicht für mich; Das hat es getan! – AVProgrammer

+0

Das gleiche funktioniert hier! –

2
fusionieren könnte

Vielleicht können Sie die Array-Syntax von JavaScript verwenden:

var finalObj =[json1 , json2] 
+0

Funktioniert perfekt. Vielen Dank. Irgendwie funktioniert concat nicht mehr für mich, obwohl es seit ungefähr 2 Jahren funktioniert. Aber dieser hier funktioniert stattdessen. Verrückte Welt. :) – kwoxer

-1

den Code unten Versuchen Sie, mit jQuery Methode erweitern:

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

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

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

Er musste ** Arrays ** von Objekten verschmelzen, Ihre Antwort tut das nicht, könnten Sie es bearbeiten/modifizieren? – Gar

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

finaljson=json1.concat(json2); 
+0

Wenn Sie auf einem Post Danke anbieten möchten, können Sie auf den Pfeil nach oben klicken. – Quentin

1

Sie können diese unter Verwendung Es 6 neue Funktion tun:

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' } ] 

Oder Sie können zwischen zwei json Array zusätzliche String oder etwas setzen:

var json3 = [...json1 ,"test", ...json2]; 

// output should like this : [ { id: 1, name: 'xxx', ocupation: 'Doctor' }, 
    'test', 
    { id: 2, name: 'xyz', ocupation: 'SE' } ] 
+0

Ich denke, es ist die Kreuzung statt Union. –

+0

Nein seine Gewerkschaft tun http://2ality.com/2015/01/es6-set-operations.html Sie können diese linl –

+0

genau was ich wollte, danke Mann.! :) – Nihal