如何删除此 CSV 生成器 for 循环中的多余逗号
How do I remove the extra comma in this CSV generator for loop
我有一组嵌套在数组中的对象。
我明白为什么 for 循环在行的末尾添加逗号,但我很难找到更好的方法来编写这个(全新的编程),里面没有逗号循环。
有没有更好的写法?
function createCSV() {
// CREATE THE CSV VARIABLE
let csvContent = "data:text/csv;charset=utf-8,"
let headers = "date,account,vendor,amount,recurring,description,notes"
csvContent += headers + "\r\n"
// ITERATE THE ARRAY INTO THE CSV SEPARATED BY COMMAS
adjustments.forEach(element => {
// EACH ARRAY ITEM
let row
//EACH OBJECT PROPERTY
for (const property in element) {
row += element[property]
row += ','
}
csvContent += row + "\r\n";
});
// DOWNLOAD THE CSV
var encodedUri = encodeURI(csvContent);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "empower_data.csv");
document.body.appendChild(link); // Required for FF
link.click();
console.log('CSV DOWNLOADED')
}
使用数组和数组连接
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');
}
更好 - 将所有内容替换为
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');
}
或真正简洁的代码
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');
}
作为最后的说明:由于 object 属性没有定义的“顺序” - 您可能想做这样的事情
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');
}
在上面,我假设 object 中的 属性 名称与 CSV 列 headers 相同,但是,当然,情况不一定如此(我根本不知道)
最好的方法是使用数组而不是字符串连接,并用 array.join()
完成:
function createCSV() {
// CREATE THE CSV VARIABLE
let csvContent = "data:text/csv;charset=utf-8,"
let headers = "date,account,vendor,amount,recurring,description,notes"
csvContent += headers + "\r\n"
// ITERATE THE ARRAY INTO THE CSV SEPARATED BY COMMAS
adjustments.forEach(element => {
// EACH ARRAY ITEM
const row = [];
//EACH OBJECT PROPERTY
for (const property in element) {
row.push(element[property]);
}
csvContent += row.join(',') + "\r\n";
});
// DOWNLOAD THE CSV
var encodedUri = encodeURI(csvContent);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "empower_data.csv");
document.body.appendChild(link); // Required for FF
link.click();
console.log('CSV DOWNLOADED')
}
我有一组嵌套在数组中的对象。
我明白为什么 for 循环在行的末尾添加逗号,但我很难找到更好的方法来编写这个(全新的编程),里面没有逗号循环。
有没有更好的写法?
function createCSV() {
// CREATE THE CSV VARIABLE
let csvContent = "data:text/csv;charset=utf-8,"
let headers = "date,account,vendor,amount,recurring,description,notes"
csvContent += headers + "\r\n"
// ITERATE THE ARRAY INTO THE CSV SEPARATED BY COMMAS
adjustments.forEach(element => {
// EACH ARRAY ITEM
let row
//EACH OBJECT PROPERTY
for (const property in element) {
row += element[property]
row += ','
}
csvContent += row + "\r\n";
});
// DOWNLOAD THE CSV
var encodedUri = encodeURI(csvContent);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "empower_data.csv");
document.body.appendChild(link); // Required for FF
link.click();
console.log('CSV DOWNLOADED')
}
使用数组和数组连接
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');
}
更好 - 将所有内容替换为
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');
}
或真正简洁的代码
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');
}
作为最后的说明:由于 object 属性没有定义的“顺序” - 您可能想做这样的事情
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');
}
在上面,我假设 object 中的 属性 名称与 CSV 列 headers 相同,但是,当然,情况不一定如此(我根本不知道)
最好的方法是使用数组而不是字符串连接,并用 array.join()
完成:
function createCSV() {
// CREATE THE CSV VARIABLE
let csvContent = "data:text/csv;charset=utf-8,"
let headers = "date,account,vendor,amount,recurring,description,notes"
csvContent += headers + "\r\n"
// ITERATE THE ARRAY INTO THE CSV SEPARATED BY COMMAS
adjustments.forEach(element => {
// EACH ARRAY ITEM
const row = [];
//EACH OBJECT PROPERTY
for (const property in element) {
row.push(element[property]);
}
csvContent += row.join(',') + "\r\n";
});
// DOWNLOAD THE CSV
var encodedUri = encodeURI(csvContent);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "empower_data.csv");
document.body.appendChild(link); // Required for FF
link.click();
console.log('CSV DOWNLOADED')
}