Implodir uma matriz com jQuery / Javascript?

279

Posso implodir uma matriz no jQuery como no PHP?

Ómega
fonte

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.

jon_darkstar
fonte
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
62

Como isso:

[1,2,3,4].join('; ')
mikerobi
fonte
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.

nikc.org
fonte
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
Robbie Averill
fonte
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);

Deepu Reghunath
fonte
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);
Vijay Verma
fonte
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.

jaysponsored
fonte
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