tablas - obtener datos de una tabla html javascript
¿Una forma sencilla de convertir la matriz de JavaScript en una lista separada por comas? (15)
¿Quieres terminar con un "y"?
Para esta situación, creé un módulo npm.
Prueba 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
Lee mas
Inténtalo tú mismo
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) para convertir eso en una lista separada por comas? (Sé cómo iterar a través de la matriz y construir la cadena por concatenación, si esa es la única manera).
Aquí hay una implementación que convierte una matriz bidimensional o una matriz de columnas en una cadena CSV escapada correctamente. Las funciones no comprueban la cadena válida / número de entrada o el número de columnas (asegúrese de que su matriz es válida para empezar). Las celdas 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");
};
}
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 verificar si la cadena contiene una coma o una cita. Si lo hace, entonces duplica todas las comillas y pone comillas en los extremos. Luego une cada una de las partes con una coma.
El método Array.prototype.join() :
var arr = ["Zero", "One", "Two"];
document.write(arr.join(", "));
En realidad, la implementación toString()
realiza una unión con comas de forma predeterminada:
var arr = [ 42, 55 ];
var str1 = arr.toString(); // Gives you "42,55"
var str2 = String(arr); // Ditto
No sé si esto es obligatorio por la especificación JS pero esto es lo que más Casi todos los navegadores parecen estar haciendo.
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(",");
Retazo
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 la matriz especificada y sus elementos.
El código
var arr = ["this","is","a","comma","separated","list"];
arr = arr.toString();
Retazo
var arr = ["this", "is", "a", "comma", "separated", "list"];
arr = arr.toString();
console.log(arr);
3. Agregue [] + antes de la matriz o + [] después de una matriz
El [] + o + [] lo convertirá en una cadena
Prueba
([]+[] === [].toString())
saldrá verdadero
console.log([]+[] === [].toString());
var arr = ["this","is","a","comma","separated","list"];
arr = []+arr;
Retazo
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);
Me gustó la solución en https://jsfiddle.net/rwone/qJUh2/ porque agrega espacios después de comas:
array = ["test","test2","test3"]
array = array.toString();
array = array.replace(/,/g, ", ");
alert(array);
O, como lo sugiere @StackOverflaw en los comentarios:
array.join('', '');
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 le llama devuelve exactamente lo que necesita: lista separada por comas.
Por lo general, necesito 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 pareciera a la de mi segundo ejemplo. Por eso prefiero esta solución.
Si necesita usar "y" en lugar de "," entre los dos últimos elementos, puede hacer esto:
function arrayToList(array){
return array
.join(", ")
.replace(/, ((?:.(?!, ))+)$/, '' and $1'');
}
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 de unión 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 REST (de alguna manera):
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 de datos y el uso, y todo estará bien con el mundo.
Utilice el método Array.toString
var arr = [''one'', ''two'', ''three''];
arr.toString(); // ''one,two,three''
Papa Parse (basado en navegador) maneja comas en valores y otros casos de borde. Use Baby Parse para Node.
P.ej. (nodo)
const csvParser = require(''babyparse'');
var arr = [1,null,"a,b"] ;
var csv = csvParser.unparse([arr]) ;
console.log(csv) ;
1, "a, b"
var arr = ["Pro1", "Pro2", "Pro3"];
console.log(arr.join());// Pro1,Pro2,Pro3
console.log(arr.join('', ''));// Pro1, Pro2, Pro3
var array = ["Zero", "One", "Two"];
var s = array + [];
console.log(s); // => Zero,One,Two