use array and array join
function createCSV() {
let csvContent = "data:text/csv;charset=utf-8,";
let headers = "date,account,vendor,amount,recurring,description,notes";
csvContent += headers + "\r\n";
adjustments.forEach(element => {
// begin changes
let row = [];
for (const property in element) {
row.push(element[property]);
}
csvContent += row.join(',') + "\r\n";
// end changes
});
var encodedUri = encodeURI(csvContent);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "empower_data.csv");
document.body.appendChild(link);
link.click();
console.log('CSV DOWNLOADED');
}
better yet - replace all that with
function createCSV() {
let csvContent = "data:text/csv;charset=utf-8,";
let headers = "date,account,vendor,amount,recurring,description,notes";
csvContent += headers + "\r\n";
adjustments.forEach(element => {
// begin changes
csvContent += Object.values(element).join(',') + "\r\n";
// end changes
});
var encodedUri = encodeURI(csvContent);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "empower_data.csv");
document.body.appendChild(link);
link.click();
console.log('CSV DOWNLOADED');
}
or for really neat code
function createCSV() {
let csvContent = "data:text/csv;charset=utf-8,";
let headers = "date,account,vendor,amount,recurring,description,notes";
csvContent += headers + "\r\n";
// begin changes
csvContent += adjustments.map(
element => Object.values(element).join(',')
).join('\r\n');
// end changes
var encodedUri = encodeURI(csvContent);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "empower_data.csv");
document.body.appendChild(link);
link.click();
console.log('CSV DOWNLOADED');
}
As a final note: since object properties don't have a defined "order" - you may want to do something like this
function createCSV() {
const properties = ['date','account','vendor','amount','recurring','description','notes'];
let csvContent = "data:text/csv;charset=utf-8,";
let headers = "date,account,vendor,amount,recurring,description,notes";
csvContent += headers + "\r\n";
// begin changes
csvContent += adjustments.map(element => properties.map(prop => element[prop]).join(',')).join('\r\n');
// end changes
var encodedUri = encodeURI(csvContent);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "empower_data.csv");
document.body.appendChild(link);
link.click();
console.log('CSV DOWNLOADED');
}
In the above, I assume the property names in the object are the same as the CSV column headers, but, of course, that's not necessarily the case (I simply don't know)