Skip to content

Instantly share code, notes, and snippets.

@NguyenDa18
Created May 26, 2020 23:52
Show Gist options
  • Save NguyenDa18/20d07c4bcf2da75b712ce20b7bed822c to your computer and use it in GitHub Desktop.
Save NguyenDa18/20d07c4bcf2da75b712ce20b7bed822c to your computer and use it in GitHub Desktop.
Generate CSV Download Link From Array
const generateHeader = (header) => {
const newHeader = header.map(key => {
const replacement = headerMappings[key] === undefined ? key : headerMappings[key]
return replacement
})
return newHeader
}
const convertArrayOfObjectsToCSV = arrayOfObjects => {
let result = "";
const columnDelimiter = ",";
const lineDelimiter = "\n";
arrayOfObjects.map(item => {
delete item['LastUpdated']
delete item['id']
return item
})
const keys = Object.keys(arrayOfObjects[0])
const header = generateHeader(keys)
result += header.join(columnDelimiter)
result += lineDelimiter;
arrayOfObjects.forEach(item => {
let ctr = 0;
keys.forEach(key => {
if (ctr > 0) result += columnDelimiter;
result += item[key];
ctr++;
});
result += lineDelimiter;
});
console.log(result)
return result;
};
export const downloadCSV = (array, csvName) => {
const link = document.createElement("a");
if (array.length > 0) {
let csv = convertArrayOfObjectsToCSV(array);
if (csv == null) return
if (!csv.match(/^data:text\/csv/i)) {
csv = `data:text/csv;charset=utf-8,${csv}`;
}
// https://stackoverflow.com/questions/37740856/javascript-createelement-does-not-work-in-ie
document.body.appendChild(link)
link.setAttribute("href", encodeURI(csv));
link.setAttribute("download", csvName);
link.click()
link.remove()
}
else {
toast.error("🔥 No rows selected!", {
autoClose: 5000
})
}
};
@NguyenDa18
Copy link
Author

// res is string of CSV lines separated by newline
// let res = ""
// items.forEach(data => {
// res += `${data.a},${data.b},${data.c}\n`
// })

  const link = document.createElement("a");
  document.body.appendChild(link)
  link.style = "display: none"
  const blob = new Blob([res], { type: "octet/stream" })
  const downloadurl = window.URL.createObjectURL(blob)
  link.href = downloadurl
  link.download = 'export.csv'
  link.click()
  window.URL.revokeObjectURL(downloadurl)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment