Implodir uma matriz com jQuery / Javascript?


Respostas:


546

Você pode fazer isso em JavaScript simples, use Array.prototype.join:

arrayName.join(delimiter)

Eu não conheço nenhuma função jQuery que seja melhor.


4
A força de um moderador pode aceitar esta resposta ou de alguma forma como ela chega ao topo? Eu perdi esta resposta inicialmente lendo isso.
PressingOnAlways


28

Array.joiné o que você precisa, mas se quiser, as pessoas amigáveis ​​do phpjs.org criaram implodepara você.

Em seguida, algumas discussões um pouco fora de tópico. Como o @jon_darkstar já apontou, o jQuery é JavaScript e não vice-versa. Você não precisa saber JavaScript para entender como usar o jQuery, mas certamente não dói e, quando você começa a apreciar a reutilização ou começa a olhar para a imagem maior, precisa absolutamente aprendê-la.


23
em seguida, novamente, JavaScript é meu plugin jQuery favorito ;-)
jon_darkstar

16

Para referência futura, se você quiser imitar o comportamento do PHP implode()quando nenhum delimitador for especificado (literalmente, apenas juntar as peças), você precisará passar uma string vazia para o Javascript, join()caso contrário, usará vírgulas como delimitadores:

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

O método join () cria e retorna uma nova string concatenando todos os elementos em uma matriz.

Exemplo de trabalho

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


1

Podemos criar alternativa de implode de em 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 de livro didático de coisas para não fazer. Não execute concatenação de strings em um loop. Não substitua as funções integradas rápidas pelo seu próprio código lento. Usar o Arrayconstrutor em vez de literais é desnecessariamente detalhado. Se você está desesperado para recriar a função implode, o mais inteligente seria envolver o método de junção incorporado com sua própria função. A coisa mais inteligente é para aprender o idioma que você está programando.
mikerobi

0

array.joinnão estava reconhecendo ";" como um separador, mas substituindo-o por vírgula. Usando o jQuery, você pode usar $.eachpara implodir uma matriz (observe que output_saved_json é a matriz e tmp é a string que armazenará a matriz implodida):

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

Eu usei substring para remover o último ";" adicionado na final sem necessidade. Mas se você preferir, pode usar substringalgo como:

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 que esta última solução é mais lenta que a 1ª porque precisa verificar se o índice é diferente do comprimento da matriz sempre $.eachque não termina.


Se você estava recebendo um ',' em vez de um ';' você estava esquecendo de passar o delimitador para o método join. Tenteyour_array.join(';')
mikerobi

Eu tentei naquele tempo, mas não funcionou no IE (não me lembro da versão exata, mas acho que era o IE6). Eu precisava apoiá-lo nesse momento (aplicativo Enterprise ...). Nos navegadores mais recentes, sua nota provavelmente faz sentido. Obrigado pela nota Mike e obrigado pelo voto negativo ANTES de perguntar POR QUE eu usei esse método.
usar o seguinte código

1
O parâmetro join funciona no IE 4, 5, 5.5, 6+. Talvez eu tenha trabalhado no IE3, mas não consigo que minha cópia execute nenhum JavaScript, portanto não posso testar.
mikerobi

Sim, funciona. Mas não com ";". Ele se junta, mas substitui ";" com ",", pelo menos no Server 2003.
jaysponsored
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.