¿Una manera fácil de convertir la matriz de JavaScript en una lista separada por comas?


Tengo una matriz unidimensional de cadenas en JavaScript que me gustaría convertir en una lista separada por comas. ¿Hay una forma sencilla en JavaScript de variedad de jardín (o jQuery) de convertir eso en una lista separada por comas? (Sé cómo iterar a través de la matriz y construir la cadena yo mismo por concatenación si esa es la única manera.)

Author: sg7, 2008-10-14

15 answers

La matriz .prototipo.método join () :

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

document.write(arr.join(", "));
 639
Author: Wayne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-17 03:52:02

En realidad, la implementación toString() hace una combinación con comas por defecto:

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

No se si esto es requerido por la especificación JS pero esto es lo que la mayoría casi todos los navegadores parecen estar haciendo.

 81
Author: Ates Goral,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-14 18:21:34

O (más eficientemente):

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

document.write(arr); // same as document.write(arr.toString()) in this context

El método toString de una matriz cuando se llama devuelve exactamente lo que necesita - lista separada por comas.

 28
Author: Sergey Ilinsky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-14 17:45:52

Aquí hay una implementación que convierte una matriz bidimensional o una matriz de columnas en una cadena CSV correctamente escapada. Las funciones no comprueban la entrada de cadena/número válida o los recuentos de columnas (asegúrese de que su matriz sea válida para empezar). Las células pueden contener comas y comillas!

Aquí hay un script para decodificar cadenas CSV.

Aquí está mi script para codificar cadenas CSV :

// 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");
    };
}
 13
Author: skibulk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-21 00:24:57

Creo que esto debería hacerlo:

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(',');

Fiddle

Básicamente todo lo que hace es comprobar si la cadena contiene una coma o comilla. Si lo hace, entonces duplica todas las comillas y pone comillas en los extremos. Luego une cada una de las partes con una coma.

 10
Author: mpen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-10 23:44:31

Utilice el método incorporado Array.toString

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

MDN en matriz.toString()

 7
Author: Avijit Gupta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-13 10:46:11

Si necesita usar " y "en lugar de", " entre los dos últimos elementos puede hacer esto:

function arrayToList(array){
  return array
    .join(", ")
    .replace(/, ((?:.(?!, ))+)$/, ' and $1');
}
 3
Author: Andrew Downes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-25 10:37:33

Normalmente me encuentro necesitando algo que también omita el valor si ese valor es null o undefined, etc.

Así que aquí está la solución que funciona para mí:

// 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'

La mayoría de las soluciones aquí devolverían ', apple' si mi matriz se vería como la de mi segundo ejemplo. Por eso prefiero esta solución.

 3
Author: knowbody,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-30 10:16:34

Hay muchos métodos para convertir una matriz en una lista separada por comas

1. Usando array # join

De MDN

El método join() une todos los elementos de una matriz (o un objeto similar a una matriz) en una cadena.

El código

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

Fragmento

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

2. Usando array # toString

De MDN

El método toString () devuelve una cadena que representa array especificado y sus elementos.

El código

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

Fragmento

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

3. Añadir [] + antes de array o +[] después de un array

La []+ o +[] va a convertir en una cadena

Prueba

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

Mostrará verdadero

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

Fragmento

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

También

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

var arr = ["this", "is", "a", "comma", "separated", "list"];
arr = arr + [];
console.log(arr);
 3
Author: Sagar V,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-18 08:18:19

Tomando el código inicial:

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

La respuesta inicial de usar la función join es ideal. Una cosa a considerar sería el uso final de la cadena.

Para usar en alguna visualización textual final:

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

Para usar en una URL para pasar múltiples valores de una manera (algo) 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"

Por supuesto, todo depende del uso final. Solo tenga en cuenta la fuente y el uso de los datos y todo estará bien con el mundo.

 1
Author: E Roberts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-23 20:50:48

¿quieres terminar con un "y"?

Para esta situación, he creado un módulo npm.

Intenta arrford :


Uso

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


Leer más

Https://github.com/dawsonbotsford/arrford


Pruébalo tú mismo

Enlace tónico

 1
Author: Dawson Botsford,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-24 22:50:22
var arr = ["Pro1", "Pro2", "Pro3"];
console.log(arr.join());// Pro1,Pro2,Pro3
console.log(arr.join(', '));// Pro1, Pro2, Pro3
 0
Author: Akash Pulikkottil James,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-07 08:05:07

Papa Parse (basado en navegador) maneja comas en valores y otros casos de borde. Utilice Baby Parse para Node.

Eg. (nodo)

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

1,,"a, b"

 0
Author: Bob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-08 16:32:29

Me gustó la solución en https://jsfiddle.net/rwone/qJUh2 / porque añade espacios después de comas:

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

O, como sugiere @StackOverflaw en los comentarios:

array.join(', ');
 0
Author: Jaime Montoya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-29 16:26:20
var array = ["Zero", "One", "Two"];
var s = array + [];
console.log(s); // => Zero,One,Two
 -1
Author: alejandro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-01 05:54:53