Implodere un array con jQuery / Javascript?


Risposte:


546

Puoi farlo in semplice JavaScript, utilizzare Array.prototype.join:

arrayName.join(delimiter)

Non conosco alcuna funzione jQuery che sia migliore.


4
Può un moderatore forzare accettare questa risposta o in qualche modo come farla andare in cima? Ho perso questa risposta inizialmente leggendo questo.
Premendo sempre


28

Array.joinè ciò di cui hai bisogno, ma se ti piace, le persone amichevoli di phpjs.org hanno creato implodeper te.

Quindi alcuni ranting leggermente fuori tema. Come sottolineato da @jon_darkstar, jQuery è JavaScript e non viceversa. Non è necessario conoscere JavaScript per essere in grado di capire come utilizzare jQuery, ma sicuramente non fa male e una volta che inizi ad apprezzare la riusabilità o inizi a guardare l'immagine più grande, devi assolutamente impararla.


23
poi di nuovo, javascript è il mio plugin jQuery preferito ;-)
jon_darkstar

16

Per riferimento futuro, se si desidera imitare il comportamento di PHP implode()quando non viene specificato alcun delimitatore (letteralmente basta unire i pezzi insieme), è necessario passare una stringa vuota in Javascript, join()altrimenti per impostazione predefinita si usano virgole come delimitatori:

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

Utilizzare il metodo join () crea e restituisce una nuova stringa concatenando tutti gli elementi in un array.

Esempio funzionante

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


1

Possiamo creare un'alternativa di implode in 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
Caso del libro di testo di cose da non fare. Non eseguire la concatenazione di stringhe in un ciclo. Non sostituire le funzioni integrate rapide con il proprio codice lento. L'uso del Arraycostruttore al posto dei letterali è inutilmente dettagliato. Se desideri disperatamente ricreare la funzione di implosione, la cosa intelligente sarebbe avvolgere il metodo di join incorporato con la tua funzione. La cosa più intelligente è imparare la lingua in cui stai programmando.
mikerobi,

0

array.joinnon stava riconoscendo ";" come un separatore, ma sostituendolo con una virgola. Utilizzando jQuery, è possibile utilizzare $.eachper implodere un array (si noti che output_saved_json è l'array e tmp è la stringa che memorizzerà l'array imploso):

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

Ho usato la sottostringa per rimuovere l'ultimo ";" aggiunto alla finale senza necessità. Ma se preferisci, puoi usare invece substringqualcosa del tipo:

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;

Penso che quest'ultima soluzione sia più lenta della prima perché deve verificare se l'indice è diverso dalla lunghezza dell'array ogni volta $.eachche non finisce.


Se stavi ottenendo un ',' invece di un ';' ti stavi dimenticando di passare il delimitatore al metodo join. Provayour_array.join(';')
mikerobi il

L'ho provato in quel momento ma non ha funzionato in IE (non ricordo la versione esatta, ma penso che fosse IE6). Avevo bisogno di supportarlo in quel momento (app Enterprise ...). Nei browser più recenti la tua nota probabilmente ha senso. Grazie per la nota Mike e grazie per il voto PRIMA di chiedere PERCHÉ ho usato questo metodo.
jaysponsored,

1
Il parametro join funziona in IE 4, 5, 5.5, 6+. Potrei non aver funzionato in IE3 ma non riesco a ottenere la mia copia per eseguire JavaScript, quindi non posso testare.
mikerobi,

Sì funziona. Ma non con ";". Si unisce ma sostituisce ";" con ",", almeno su Server 2003.
jaysponsored
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.