Maneira fácil de transformar o JavaScript array numa lista separada por vírgulas?

Tenho um conjunto unidimensional de cordas em JavaScript que I'gostaria de transformar numa lista separada por vírgulas. Existe alguma forma simples em JavaScript (ou jQuery) de transformar isso numa lista separada por vírgulas? (Sei como iterar através da matriz e construir eu próprio o fio por concatenação se esse's for o único caminho).

Comentários sobre a pergunta (1)
Solução

O método Array.prototype.join():

var arr = ["Zero", "One", "Two"];

document.write(arr.join(", "));
Comentários (8)

Na verdade, a implementação toString() faz uma junção com vírgulas por defeito:

var arr = [ 42, 55 ];
var str1 = arr.toString(); // Gives you "42,55"
var str2 = String(arr); // Ditto

Não sei se isto é exigido pelas especificações do JS, mas isto é o que most praticamente tudo os navegadores parecem estar a fazer.

Comentários (4)

Ou (mais eficientemente):

var arr = novo Array(3);
arr[0] = "Zero";
arr[1] = "One";
arr[2] = "Two";

document.write(arr); // o mesmo que document.write(arr.toString()) neste contexto

O método toString de um array quando chamado devolve exactamente o que precisa - lista separada por vírgulas.

Comentários (1)

Aqui's uma implementação que converte um array bidimensional ou um array de colunas em uma string CSV devidamente escapada. As funções não verificam a entrada de strings/números ou contagens de colunas válidas (assegure-se de que seu array é válido para começar). As células podem conter vírgulas e aspas!

Aqui's um [script para decodificar strings CSV][1].

Aqui's o meu [script para codificar strings CSV][2]:

// Example
var csv = new csvWriter();
csv.del = '\t';
csv.enc = "'";

var nullVar;
var testStr = "The comma (,) pipe (|) single quote (') double quote (\") and tab (\t) are commonly used to tabulate data in plain-text formats.";
var testArr = [
    false,
    0,
    nullVar,
    // undefinedVar,
    '',
    {key:'value'},
];

console.log(csv.escapeCol(testStr));
console.log(csv.arrayToRow(testArr));
console.log(csv.arrayToCSV([testArr, testArr, testArr]));

/**
 * Class for creating csv strings
 * Handles multiple data types
 * Objects are cast to Strings
 **/

function csvWriter(del, enc) {
    this.del = del || ','; // CSV Delimiter
    this.enc = enc || '"'; // CSV Enclosure

    // Convert Object to CSV column
    this.escapeCol = function (col) {
        if(isNaN(col)) {
            // is not boolean or numeric
            if (!col) {
                // is null or undefined
                col = '';
            } else {
                // is string or object
                col = String(col);
                if (col.length > 0) {
                    // use regex to test for del, enc, \r or \n
                    // if(new RegExp( '[' + this.del + this.enc + '\r\n]' ).test(col)) {

                    // escape inline enclosure
                    col = col.split( this.enc ).join( this.enc + this.enc );

                    // wrap with enclosure
                    col = this.enc + col + this.enc;
                }
            }
        }
        return col;
    };

    // Convert an Array of columns into an escaped CSV row
    this.arrayToRow = function (arr) {
        var arr2 = arr.slice(0);

        var i, ii = arr2.length;
        for(i = 0; i < ii; i++) {
            arr2[i] = this.escapeCol(arr2[i]);
        }
        return arr2.join(this.del);
    };

    // Convert a two-dimensional Array into an escaped multi-row CSV 
    this.arrayToCSV = function (arr) {
        var arr2 = arr.slice(0);

        var i, ii = arr2.length;
        for(i = 0; i < ii; i++) {
            arr2[i] = this.arrayToRow(arr2[i]);
        }
        return arr2.join("\r\n");
    };
}

[1]: https://github.com/thetalecrafter/excel.js/blob/master/src/csv.js [2]: http://jsfiddle.net/skibulk/F5hGx/19/

Comentários (0)

Acho que isto deve servir:

var arr = ['contains,comma', 3.14, 'contains"quote', "more'quotes"]
var item, i;
var line = [];

for (i = 0; i < arr.length; ++i) {
    item = arr[i];
    if (item.indexOf && (item.indexOf(',') !== -1 || item.indexOf('"') !== -1)) {
        item = '"' + item.replace(/"/g, '""') + '"';
    }
    line.push(item);
}

document.getElementById('out').innerHTML = line.join(',');

[violino](http://jsfiddle.net/mnbayazit/G9mYj/4/)

Basicamente, tudo o que faz é verificar se a string contém uma vírgula ou citação. Se contém, então duplica todas as aspas, e coloca aspas nas pontas. Depois junta cada uma das partes com uma vírgula.

Comentários (4)

Há muitos métodos para converter um array para uma lista separada por vírgulas

1.

Usando array#join

De MDN

O método join() une todos os elementos de um array (ou um objeto parecido com um array) em uma string.

O código

var arr = ["this","is","a","comma","separated","list"];
arr = arr.join(",");

Snippet

2.

Usando array#toString

De MDN

O método toString() retorna uma string representando o array especificado e seus elementos.

O código

var arr = ["this","is","a","comma","separated","list"];
arr = arr.toString();

Snippet

3.

Adicione []+ antes do array ou +[] depois de um array

O []+ ou +[] irá convertê-lo em uma cadeia

Prova

([]+[] === [].toString())

irá sair verdadeiro

var arr = ["this","is","a","comma","separated","list"];
arr = []+arr;

Snippet

Tambem

var arr = ["this","is","a","comma","separated","list"];
arr = arr+[];
Comentários (0)

Utilize o método integrado `Array.toString'.

var arr = ['one', 'two', 'three'];
arr.toString();  // 'one,two,three'

MDN no Array.toString()

Comentários (0)

Se precisar de usar o " e " em vez do ", " entre os dois últimos itens, você pode fazer isso:

function arrayToList(array){
  return array
    .join(", ")
    .replace(/, ((?:.(?!, ))+)$/, ' and $1');
}
Comentários (0)

Eu geralmente me vejo precisando de algo que também salte o valor se esse valor for "nulo" ou "indefinido", etc.

Então aqui está a solução que funciona para mim:

// Example 1
const arr1 = ['apple', null, 'banana', '', undefined, 'pear'];
const commaSeparated1 = arr1.filter(item => item).join(', ');
console.log(commaSeparated1); // 'apple, banana, pear'

// Example 2
const arr2 = [null, 'apple'];
const commaSeparated2 = arr2.filter(item => item).join(', ');
console.log(commaSeparated2); // 'apple'

A maioria das soluções aqui retornariam &#39;, apple&#39; se meu array se parecesse com o do meu segundo exemplo. É por isso que eu prefiro esta solução.

Comentários (0)

Você quer terminar com um " e"?

Para esta situação, eu criei um módulo npm.

Tente [arrford][1]:


Utilização

const arrford = require('arrford');

arrford(['run', 'climb', 'jump!']);
//=> 'run, climb, and jump!'

arrford(['run', 'climb', 'jump!'], false);
//=> 'run, climb and jump!'

arrford(['run', 'climb!']);
//=> 'run and climb!'

arrford(['run!']);
//=> 'run!'


Instalar

npm install --save arrford


Ler mais

[https://github.com/dawsonbotsford/arrford][1] [2]


Experimente você mesmo

[Ligação tônica][2]

[1]: https://github.com/dawsonbotsford/arrford [2]: https://tonicdev.com/dawsonbotsford/56f46dd154d4e814002e34b9

Comentários (0)

Pegando o código inicial:

var arr = new Array(3);
arr[0] = "Zero";
arr[1] = "One";
arr[2] = "Two";

A resposta inicial de usar a função de união é ideal. Uma coisa a considerar seria o uso final da corda.

Para usar em alguma exibição textual final:

arr.join(",")
=> "Zero,One,Two"

Para usar em uma URL para passar múltiplos valores de uma maneira (um pouco) RESTful:

arr.join("|")
=> "Zero|One|Two"

var url = 'http://www.yoursitehere.com/do/something/to/' + arr.join("|");
=> "http://www.yoursitehere.com/do/something/to/Zero|One|Two"

Claro, tudo depende do uso final. Basta manter a fonte de dados e o uso em mente e tudo estará certo com o mundo.

Comentários (0)

Eu gostei da solução em [https://jsfiddle.net/rwone/qJUh2/][1] porque ela adiciona espaços após vírgulas:

array = ["test","test2","test3"]
array = array.toString();
array = array.replace(/,/g, ", ");
alert(array);

Ou, como sugerido por @StackOverflaw nos comentários:

array.join(', ');

[1]: https://jsfiddle.net/rwone/qJUh2/

Comentários (3)

[Papa Parse][1] (baseado no navegador) lida com vírgulas em valores e outros casos de bordas. Use [Baby Parse][2] para Node.

Ex. (nó)

const csvParser = require('babyparse');
var arr = [1,null,"a,b"] ;
var csv = csvParser.unparse([arr]) ;
console.log(csv) ;

1,,"a,b"

[1]: http://papaparse.com/ [2]: https://github.com/Rich-Harris/BabyParse

Comentários (0)

Esta solução também remove valores tais como " ":

const resultado = [&#39;&#39;, nulo, &#39;foo&#39;, &#39;
&#39;, indefinido, &#39;bar&#39;].filter(el =>
{
devolver Boolean(el) &&
el.trim() !== &#39;&#39;;
}).join(&#39;, &#39;);

console.log(resultado);
// =>
foo, bar
Comentários (0)
var arr = ["Pro1", "Pro2", "Pro3"];
console.log(arr.join());// Pro1,Pro2,Pro3
console.log(arr.join(', '));// Pro1, Pro2, Pro3
Comentários (0)
var array = ["Zero", "One", "Two"];
var s = array + [];
console.log(s); // => Zero,One,Two
Comentários (1)

A partir de [Chrome 72][1], é possível usar [Intl.ListFormat][2]:

const vehicles = ['Motorcycle', 'Bus', 'Car'];

const formatter = new Intl.ListFormat('en', { style: 'long', type: 'conjunction' });
console.log(formatter.format(vehicles));
// expected output: "Motorcycle, Bus, and Car"

const formatter2 = new Intl.ListFormat('de', { style: 'short', type: 'disjunction' });
console.log(formatter2.format(vehicles));
// expected output: "Motorcycle, Bus oder Car"

const formatter3 = new Intl.ListFormat('en', { style: 'narrow', type: 'unit' });
console.log(formatter3.format(vehicles));
// expected output: "Motorcycle Bus Car"

Por favor, note que esta forma está em sua fase muito anterior, portanto, a partir da data de postagem desta resposta, espere incompatibilidade com versões mais antigas do Chrome e outros navegadores.

[1]: https://developers.google.com/web/updates/2019/01/nic72#intl-format [2]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ListFormat

Comentários (0)