Converter array de javascript em string

115

Estou tentando iterar em uma lista de "valores" e convertê-la em uma string. Aqui está o código:

var blkstr = $.each(value, function(idx2,val2) {                    
     var str = idx2 + ":" + val2;
     alert(str);
     return str;
}).get().join(", ");    

A função alert () funciona perfeitamente e exibe o valor adequado. Mas de alguma forma, a função .get () do jquery não obtém o tipo certo de objeto e falha. O que estou fazendo de errado?

Neo
fonte
5
o que é "valor"? É uma matriz? Nesse caso, var str = value.join (',') pode funcionar muito bem.
StefanS
Sim. Se eu comentar a parte .get (), recebo caixas de alerta que exibem "id1: val1", "id2: val2" etc.
Neo
Você quer dizer "... pegue o tipo certo de objeto"? (Uma revisão rápida antes de clicar em Fazer pergunta geralmente é uma boa ideia.) (Eu removi meu comentário anterior, que foi colocado com mais ênfase - esta pergunta tem muito menos erros de digitação e tal do que muitos.)
TJ Crowder

Respostas:

131

Se valuefor uma matriz associativa, esse código funcionará bem:

var value = { "aaa": "111", "bbb": "222", "ccc": "333" };
var blkstr = [];
$.each(value, function(idx2,val2) {                    
  var str = idx2 + ":" + val2;
  blkstr.push(str);
});
console.log(blkstr.join(", "));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

(a saída aparecerá no console dev)

Como o Felix mencionou, each()está apenas iterando o array, nada mais.

Shadow Wizard é ouvido para você
fonte
118

Converter de Array em String é tão fácil!

var A = ['Sunday','Monday','Tuesday','Wednesday','Thursday']
array = A + ""

É isso. Agora A é uma string. :)

Homem Aranha
fonte
7
Eu sugeriria A.toString () em vez disso, para que fique mais claro o que você está fazendo.
Justin
8
Se você fizer isso [1,2,[3]].toString(), você obterá 1,2,3, o que é uma besteira. Essa resposta é apenas uma maneira pior de escrever a mesma chamada para o mesmo método de string nativo quebrado. 42 votos positivos ??
Carl Smith
8
você também pode juntar uma matriz como assim['Sunday','Monday','Tuesday','Wednesday','Thursday'].join('');
etoxin
1
Array.join()é definitivamente a melhor opção, já que não vai simplesmente concatenar valores com vírgulas, mas permite ao usuário determinar como a concatenação deve ser feita. Você pode usar vírgula + espaço em branco, por exemplo.
Felipe Leão
1
Isto é perfeito para mim. Estou passando uma matriz que é alterada para uma string separada por vírgulas, sem espaços para uma chamada de API. Obrigado novamente.
Nick D
104

Você pode usar .toString()para unir uma matriz com uma vírgula.

var array = ['a', 'b', 'c'];
array.toString(); // result: a,b,c

Ou defina o separador com array.join('; '); // result: a; b; c.

Justin
fonte
3
Eu estava apenas esperando que o array fosse literalmente traduzido em uma string e então fosse forçado a usar Regex para cortar a gordura, mas isso é Oh So Muito Melhor! Obrigado Justin.
cranberry
52

não tenho certeza se é isso que você queria, mas

var arr = [A, B, C];
var arrString = arr.join(", ");

Isso resulta na seguinte saída:

A, B, C

Nicholas
fonte
1
esta é a maneira mais simples de todas, parabéns
Jimmy Obonyo Abor
1
Eu precisava de um espaço extra para a vírgula, essa era a única maneira fácil .
Talha Talip Açıkgöz
1
Maneira mais simples e fácil. Obrigado
Raul A.
36

Quatro métodos para converter uma matriz em uma string.

Coagir para uma corda

var arr = ['a', 'b', 'c'] + [];  // "a,b,c"

var arr = ['a', 'b', 'c'] + '';  // "a,b,c"

Chamando .toString()

var arr = ['a', 'b', 'c'].toString();  // "a,b,c"

Unindo explicitamente usando .join()

var arr = ['a', 'b', 'c'].join();  // "a,b,c" (Defaults to ',' seperator)

var arr = ['a', 'b', 'c'].join(',');  // "a,b,c"

Você pode usar outros separadores, por exemplo, ', '

var arr = ['a', 'b', 'c'].join(', ');  // "a, b, c"

Usando JSON.stringify()

Isso é mais limpo, pois cita strings dentro do array e trata os arrays aninhados corretamente.

var arr = JSON.stringify(['a', 'b', 'c']);  // '["a","b","c"]'
VIJAY P
fonte
17

jQuery.eachestá apenas fazendo um loop no array, não faz nada com o valor de retorno . Você está procurando jQuery.map(também acho que get()é desnecessário, pois você não está lidando com objetos jQuery):

var blkstr = $.map(value, function(val,index) {                    
     var str = index + ":" + val;
     return str;
}).join(", ");  

DEMO


Mas por que usar jQuery neste caso? mapapenas introduz uma chamada de função desnecessária por elemento.

var values = [];

for(var i = 0, l = value.length; i < l; i++) {
    values.push(i + ':' + value[i]);
}

// or if you actually have an object:

for(var id in value) {
    if(value.hasOwnProperty(id)) {
        values.push(id + ':' + value[id]);
    }
}

var blkstr = values.join(', ');

Nota: Ele apenas usa o valor de retorno se deve continuar a fazer o loop sobre os elementos ou não. Retornar um valor "falso" interromperá o loop.

Felix Kling
fonte
Eu meio que colei o código "limpo" aqui. Estou de fato lidando com objetos jquery. Obrigado, o mapa funciona perfeitamente.
Neo
@Neo: Você só precisa mapse valuefor um objeto jQuery. E então você deve usar value.map(...).get(). Mas se você tem apenas uma matriz de objetos jQuery, não precisa get. De nada :)
Felix Kling
9

Use join()e o separador.

Exemplo de trabalho

var arr = ['a', 'b', 'c', 1, 2, '3'];

// using toString method
var rslt = arr.toString(); 
console.log(rslt);

// using join method. With a separator '-'
rslt = arr.join('-');
console.log(rslt);

// using join method. without a separator 
rslt = arr.join('');
console.log(rslt);

Deepu Reghunath
fonte
4

esta é minha função, converter objeto ou array para json

function obj2json(_data){
    str = '{ ';
    first = true;
    $.each(_data, function(i, v) { 
        if(first != true)
            str += ",";
        else first = false;
        if ($.type(v)== 'object' )
            str += "'" + i + "':" + obj2arr(v) ;
        else if ($.type(v)== 'array')
            str += "'" + i + "':" + obj2arr(v) ;
        else{
            str +=  "'" + i + "':'" + v + "'";
        }
    });
    return str+= '}';
}

acabei de editar para v0.2 ^. ^

 function obj2json(_data){
    str = (($.type(_data)== 'array')?'[ ': '{ ');
    first = true;
    $.each(_data, function(i, v) { 
        if(first != true)
            str += ",";
        else first = false;
        if ($.type(v)== 'object' )
            str += '"' + i + '":' + obj2json(v) ;
        else if ($.type(v)== 'array')
            str += '"' + i + '":' + obj2json(v) ;
        else{
            if($.type(_data)== 'array')
                str += '"' + v + '"';
            else
                str +=  '"' + i + '":"' + v + '"';
        }
    });
    return str+= (($.type(_data)== 'array')? ' ] ':' } ');;
}
Buitanan
fonte
3

Eu precisava de um array para se tornar uma representação de String de um array. Quer dizer, eu precisava disso

var a = ['a','b','c'];
//became a "real" array string-like to pass on query params so was easy to do:
JSON.stringify(a); //-->"['a','b','c']"

talvez alguém precise :)

Mágico
fonte
2
var arr = new Array();

var blkstr = $.each([1, 2, 3], function(idx2,val2) {                    
    arr.push(idx2 + ":" + val2);
    return arr;
}).join(', ');

console.log(blkstr);

OU

var arr = new Array();

$.each([1, 2, 3], function(idx2,val2) {                    
    arr.push(idx2 + ":" + val2);

});

console.log(arr.join(', '));
Santosh Linkha
fonte
2

converter uma matriz em uma string de parâmetro GET que pode ser anexada a um url pode ser feito da seguinte maneira

function encodeGet(array){
    return getParams = $.map(array , function(val,index) {                    
        var str = index + "=" + escape(val);
        return str;
   }).join("&");
}

chame esta função como

var getStr = encodeGet({
    search:     $('input[name="search"]').val(),
    location:   $('input[name="location"]').val(),
    dod:        $('input[name="dod"]').val(),
    type:       $('input[name="type"]').val()
});
window.location = '/site/search?'+getStr;

qual encaminhará o usuário para o / site / search? página com os parâmetros get delineados na matriz fornecida para encodeGet.

Fydo
fonte
1
Observe que jQuery.param (array) faz o que encodeGet (array) faz.
Curtis Yallop
1

Não deve confundir Array's com Listas ... Esta é uma lista: {...} e não tem comprimento, ou outras propriedades de Array.

Este é um Array: [...] e você pode usar funções de array, métodos e assim, como alguém sugeriu aqui: someArray.toString ();

"someObj.toString ();" simplesmente não funcionará em nenhum outro tipo de objeto, como Listas. ;-)

Pedro Ferreira
fonte
0

Aqui está um exemplo usando funções de sublinhado.

var exampleArray = [{name: 'moe', age: 40}, {name: 'larry', age: 50}, {name: 'curly', age: 60}];
var finalArray = _.compact(_.pluck(exampleArray,"name")).join(",");

O resultado final seria "moe, larry, curly"

sabin
fonte