web-dev-qa-db-ger.com

Fügen Sie zwei Json/Javascript-Arrays in einem Array zusammen

Ich habe zwei Json-Arrays

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

Ich möchte, dass sie zu einzelnen Arrays zusammengeführt werden

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

Grüße

Sie möchten die concat -Methode.

var finalObj = json1.concat(json2);
110
Quentin

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

Was Sie suchen, ist eine einfache JavaScript-Funktion, die als .concat bezeichnet wird. Was würde funktionieren wie:

var finalObj = json1.concat(json2);

Obwohl dies keine native jQuery-Funktion ist, können Sie sie zur späteren späteren Verwendung leicht zur jQuery-Bibliothek hinzufügen:

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

Und dann wie gewünscht abrufen:

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

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

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

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

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

37
SpYk3HH

Sie könnten versuchen, zusammenzuführen

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

Da verwenden Sie jQuery. Wie wäre es mit der jQuery.extend () -Methode?

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

Beschreibung: Zusammenführen des Inhalts von zwei oder mehr Objekten in das erste Objekt.

5
Kris Krause

Sie können dies mit der neuen Funktion von Es 6 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 einen zusätzlichen String oder irgendetwas zwischen zwei Json-Arrays setzen:

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

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

Vielleicht können Sie die Arraysyntax von Javascript verwenden: 

var finalObj =[json1 , json2]
2
Jérôme B

Dies erreichen Sie mit der Funktion 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/[email protected]/lodash.min.js"></script>

0
Yi-Ting Liu

Sie können den neuen Operator js spread verwenden, wenn Sie es6 verwenden:

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

console.log(finalObj)

0
Mailyan