72 votes

Fusionner deux tableaux json/javascript en un seul tableau

J'ai deux tableaux json comme

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

Je veux les fusionner en un seul tableau

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

0 votes

C'est dynamique. Je ne peux donc pas utiliser l'index. J'ai besoin d'une fonction qui puisse fusionner un nombre n d'objets en un objet final.

6 votes

Ce ne sont pas des objets JSON, juste des tableaux.

0 votes

@MurtazaHussain Si votre code est comme indiqué ci-dessus, mon commentaire est exact.

123voto

Quentin Points 325526

Vous voulez la méthode concat.

var finalObj = json1.concat(json2);

4 votes

@kushdilip - json1 et json2 sont des tableaux ! (Chacun a un élément, qui est un objet)

38voto

SpYk3HH Points 10533

Lorsqu'on voit le mot "merg" pour la première fois, on pense qu'il faut utiliser .extend, qui est la méthode jQuery appropriée pour "fusionner" les objets JSON. Cependant, $.extend(true, {}, json1, json2); provoquera le remplacement de toutes les valeurs partageant le même nom de clé par la dernière fournie dans les paramètres. Comme le montre votre question, ceci n'est pas souhaité.

Vous recherchez en réalité une simple fonction javascript appelée .concat. Ce qui fonctionnerait de la manière suivante :

var finalObj = json1.concat(json2);

Alors que ce n'est pas une fonction native de jQuery, vous pouvez facilement l'ajouter à la bibliothèque jQuery pour une utilisation future simple comme suit :

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

Et ensuite l'appeler comme vous le souhaitez :

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

Vous pouvez également l'utiliser pour plusieurs objets de tableau de ce type avec une syntaxe comme :

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

Et si vous voulez vraiment un style jQuery très court et concis (c'est-à-dire minifié)

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

Voir Console Log

jsFiddle

2 votes

Quel est l'avantage de jQuery ici? Je pense que l'utilisation de concat directement est le bon choix.

1 votes

@Vojta Comme expliqué dès le départ. J'ai simplement montré comment étendre jQuery pour inclure la méthode.

3 votes

Vous pouvez également écrire var finalObj = [].concat(json1, json2, json3, json4, json5, ....); dans ce cas

22voto

izb Points 12736

Vous pourriez essayer de fusionner

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

6voto

Kris Krause Points 4704

Étant donné que vous utilisez jQuery. Que pensez-vous de la méthode jQuery.extend()?

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

Description: Fusionnez le contenu de deux objets ou plus dans le premier objet.

1voto

Jérôme B Points 32

Peut-être, vous pouvez utiliser la syntaxe des tableaux en javascript :

var finalObj =[json1 , json2]

0 votes

Fonctionne parfaitement. Merci. D'une certaine manière, la concaténation ne fonctionne plus pour moi, même si cela fonctionnait depuis environ 2 ans. Mais celui-ci fonctionne à la place. Monde fou. :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X