Imploser un tableau avec jQuery / Javascript?


Réponses:


546

Vous pouvez le faire en JavaScript simple, utilisez Array.prototype.join:

arrayName.join(delimiter)

Je ne connais aucune fonction jQuery qui soit meilleure.


4
Un modérateur peut-il accepter cette réponse ou certains comment la faire remonter au sommet? J'ai raté cette réponse au début en lisant ceci.
PressingOnAlways


28

Array.joinest ce dont vous avez besoin, mais si vous le souhaitez, les gens sympathiques de phpjs.org ont créé implodepour vous.

Puis quelques délires légèrement hors sujet. Comme l'a souligné @jon_darkstar alreadt, jQuery est JavaScript et non l'inverse. Vous n'avez pas besoin de connaître JavaScript pour comprendre comment utiliser jQuery, mais cela ne fait certainement pas de mal et une fois que vous commencez à apprécier la réutilisabilité ou à regarder la vue d'ensemble, vous devez absolument l'apprendre.


23
là encore, javascript EST mon plugin jQuery préféré ;-)
jon_darkstar

16

Pour référence future, si vous souhaitez imiter le comportement de PHP implode()quand aucun délimiteur n'est spécifié (littéralement simplement joindre les morceaux ensemble), vous devez passer une chaîne vide dans Javascript join()sinon il utilise par défaut des virgules comme délimiteurs:

var bits = ['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd'];
alert(bits.join());    // H,e,l,l,o, ,W,o,r,l,d
alert(bits.join(''));  // Hello World

10

La méthode use join () crée et renvoie une nouvelle chaîne en concaténant tous les éléments d'un tableau.

Exemple de travail

var arr= ['A','b','C','d',1,'2',3,'4'];
var res= arr.join('; ')
console.log(res);


1

Nous pouvons créer une alternative à imploser en javascript:

function my_implode_js(separator,array){
       var temp = '';
       for(var i=0;i<array.length;i++){
           temp +=  array[i] 
           if(i!=array.length-1){
                temp += separator  ; 
           }
       }//end of the for loop

       return temp;
}//end of the function

var array = new Array("One", "Two", "Three");


var str = my_implode_js('-',array);
alert(str);

12
Cas de manuel des choses à ne pas faire. N'effectuez pas de concaténation de chaînes dans une boucle. Ne remplacez pas les fonctions intégrées rapides par votre propre code lent. L'utilisation du Arrayconstructeur au lieu de littéraux est inutilement verbeuse. Si vous êtes désespéré de recréer la fonction imploser, la chose intelligente serait d'envelopper la méthode de jointure intégrée avec votre propre fonction. La chose la plus intelligente est d'apprendre la langue dans laquelle vous programmez.
mikerobi

0

array.joinne reconnaissait pas ";" comment un séparateur, mais en le remplaçant par une virgule. En utilisant jQuery, vous pouvez utiliser $.eachpour imploser un tableau (Notez que output_saved_json est le tableau et tmp est la chaîne qui stockera le tableau implosé):

var tmp = "";
$.each(output_saved_json, function(index,value) {
    tmp = tmp + output_saved_json[index] + ";";
});

output_saved_json = tmp.substring(0,tmp.length - 1); // remove last ";" added

J'ai utilisé une sous-chaîne pour supprimer le dernier ";" ajouté à la finale sans nécessité. Mais si vous préférez, vous pouvez utiliser à la place substringquelque chose comme:

var tmp = "";
$.each(output_saved_json, function(index,value) {
    tmp = tmp + output_saved_json[index];

    if((index + 1) != output_saved_json.length) {
         tmp = tmp + ";";
    }
});

output_saved_json = tmp;

Je pense que cette dernière solution est plus lente que la 1ère car elle doit vérifier si l'index est différent de la longueur du tableau à chaque fois $.eachsans se terminer.


Si vous obteniez un ',' au lieu d'un ';' vous oubliez de passer le délimiteur à la méthode join. Tryyour_array.join(';')
mikerobi

Je l'ai essayé à cette époque mais cela n'a pas fonctionné dans IE (je ne me souviens pas de la version exacte, mais je pense que c'était IE6). J'avais besoin de le supporter à cette époque (application Enterprise ...). Dans les nouveaux navigateurs, votre note a probablement un sens. Merci pour la note Mike et merci pour downvote AVANT de demander POURQUOI j'ai utilisé cette méthode.
jaysponsored

1
Le paramètre join fonctionne dans IE 4, 5, 5.5, 6+. Je ne pourrais pas avoir travaillé dans IE3 mais je ne peux pas obtenir ma copie pour exécuter un code JavaScript, donc je ne peux pas tester.
mikerobi

Oui cela fonctionne. Mais pas avec ";". Il rejoint mais remplace ";" avec ",", au moins sur Server 2003.
jaysponsored
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.