Hay dos preguntas aquí:
- Cómo convertir una matriz a una cadena csv
- Cómo guardar esa cadena en un archivo
Todas las respuestas a la primera pregunta (excepto la de Milimetric) aquí parecen una exageración. Y el de Milimetric no cubre los requisitos alternativos, como las cadenas circundantes con comillas o la conversión de matrices de objetos.
Aquí están mis opiniones sobre esto:
Para un csv simple, un mapa () y un join () son suficientes:
var test_array = [["name1", 2, 3], ["name2", 4, 5], ["name3", 6, 7], ["name4", 8, 9], ["name5", 10, 11]];
var csv = test_array.map(function(d){
return d.join();
}).join('\n');
/* Results in
name1,2,3
name2,4,5
name3,6,7
name4,8,9
name5,10,11
Este método también le permite especificar un separador de columna que no sea una coma en la unión interna. por ejemplo una pestaña:d.join('\t')
Por otro lado, si desea hacerlo correctamente y encerrar cadenas entre comillas "", puede usar algo de magia JSON:
var csv = test_array.map(function(d){
return JSON.stringify(d);
})
.join('\n')
.replace(/(^\[)|(\]$)/mg, ''); // remove opening [ and closing ]
// brackets from each line
/* would produce
"name1",2,3
"name2",4,5
"name3",6,7
"name4",8,9
"name5",10,11
si tiene una variedad de objetos como:
var data = [
{"title": "Book title 1", "author": "Name1 Surname1"},
{"title": "Book title 2", "author": "Name2 Surname2"},
{"title": "Book title 3", "author": "Name3 Surname3"},
{"title": "Book title 4", "author": "Name4 Surname4"}
];
// use
var csv = data.map(function(d){
return JSON.stringify(Object.values(d));
})
.join('\n')
.replace(/(^\[)|(\]$)/mg, '');
window.open
. Sin embargo, puede crear un enlace oculto que tenga undownload
atributo establecido para el nombre de archivo que desee. Luego, "haciendo clic" en este enlace descargará el archivo en el nombre que desee, lo agregaré a mi respuesta.