How to export JavaScript array info to csv (on client side)?

client-side, csv, dojo-1.8, export, javascript

Solution

You can do this in native JavaScript. You'll have to parse your data into correct CSV format as so (assuming you are using an array of arrays for your data as you have described in the question):

const rows = [
    ["name1", "city1", "some other info"],
    ["name2", "city2", "more info"]
];

let csvContent = "data:text/csv;charset=utf-8,";

rows.forEach(function(rowArray) {
    let row = rowArray.join(",");
    csvContent += row + "\r\n";
});

or the shorter way (using arrow functions):

const rows = [
    ["name1", "city1", "some other info"],
    ["name2", "city2", "more info"]
];

let csvContent = "data:text/csv;charset=utf-8," 
    + rows.map(e => e.join(",")).join("\n");

Then you can use JavaScript's `window.open` and `encodeURI` functions to download the CSV file like so:

var encodedUri = encodeURI(csvContent);
window.open(encodedUri);

Edit:

If you want to give your file a specific name, you have to do things a little differently since this is not supported accessing a data URI using the `window.open` method. In order to achieve this, you can create a hidden `<a>` DOM node and set its `download` attribute as follows:

var encodedUri = encodeURI(csvContent);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "my_data.csv");
document.body.appendChild(link); // Required for FF

link.click(); // This will download the data file named "my_data.csv".

Problem

I know there are lot of questions of this nature but I need to do this using JavaScript. I am using `Dojo 1.8` and have all the attribute info in array, which looks like this: ``` [["name1", "city_name1", ...]["name2", "city_name2", ...]] ``` Any idea how I can export this to `CSV` on the client side?

Original source

Related problems