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' ...}]
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' ...}]
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
Quel est l'avantage de jQuery ici? Je pense que l'utilisation de concat
directement est le bon choix.
@Vojta Comme expliqué dès le départ. J'ai simplement montré comment étendre jQuery pour inclure la méthode.
Vous pouvez également écrire var finalObj = [].concat(json1, json2, json3, json4, json5, ....);
dans ce cas
É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.
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.
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.
0 votes
@Quentin
[ { "id": 1, "name": 6 } ]
est un exemple de JSON normal par exemple2 votes
@Royi Namir - Non, vous pourriez sérialiser un tableau en JSON, mais ce n'est qu'un tableau. (La syntaxe des objets à l'intérieur du tableau ne respecte pas non plus la norme JSON).
0 votes
@Quentin c'est juste un tableau - oui. mais l'exemple que j'ai donné (le tableau) est du json (et non une représentation de chaîne json) ! essayez-le avec jsonlint.com - je n'ai pas dit que son tableau est valide. mais mon exemple pour le tableau - est parfaitement correct.
0 votes
@RoyiNamir - Je parle de la question, qui contient du code JavaScript et pas de JSON. Le fait que JSON peut avoir un tableau comme structure de données la plus externe est sans importance.
0 votes
@Quentin tu as répondu
non
à ma question concernantl'array est (aussi) un objet JSON
. C'est pourquoi j'ai répondu. Nous sommes d'accord alors.