¿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.)
15 answers
La matriz .prototipo.método join () :
var arr = ["Zero", "One", "Two"];
document.write(arr.join(", "));
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.
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.
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");
};
}
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(',');
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.
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'
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');
}
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.
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);
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.
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
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
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"
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(', ');
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
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