如何根据逗号将数组转换为 CSV 字符串?
How to turn an array to a CSV string based on commas?
我有一个函数,它 return 一个 CSV 字符串供
使用
anchorEle.href = `data:text/csv;charset=utf-8,${encodeURI(csvContent)}`
如果我有这样的数组:-
[
[
"Test,Me,Once,More",
"Successful"
],
[
"Test1,Me1,Once1,More1",
"Successful"
]
]
当我的项目中有逗号时,CSV 字符串的构造会出错。我不能根据逗号的数量设置条件,因为它不是固定的用户要求。
我正在使用以下功能:-
function toCsv(arr) {
return arr.reduce((csvString, row) => {
csvString += row.join(',');
csvString += '\r\n';
return csvString;
}, '');
}
这将 return:-
Test,Me,Once,More,Successful
Test1,Me1,Once1,More1,Successful
当我下载为 CSV
我希望将 Test, Me, Once, More 作为 CSV 中的一项,保留逗号,如下所示:
RFC 4180 指定当您在字段中使用分隔符时(在您的例子中是逗号),您需要将字段括在双引号中
在您的情况下,您的文本文件输出需要如下所示:
"Test,Me,Once,More",Successful
"Test1,Me1,Once1,More1",Successful
您甚至可以将 Successful
括在双引号中。
您还需要在单元格中换行时使用双引号,但不要指望所有 CSV 解释器(例如 Excel)都能正确导入 line-break 个单元格。
正如 Dee J. Doena 所说,您应该对所有字符串值应用引号 ""
。此代码段给出了一个简单的简短示例,用于迭代数组数组并返回 CSV 字符串;
let arr = [ [ "Test,Me,Once,More", "Successful", 123 ], [ "Test1,Me1,Once1,More1", "Successful", 234 ] ];
let csvConvert = () => {
return arr.flatMap(t => t.map(o => typeof o === "string" ? `"${o}"` : o).join(",")).join("\n")
}
let anchorEle = document.getElementById("csvLink")
anchorEle.href = `data:text/csv;charset=utf-8,${encodeURI(csvConvert())}`;
<a id="csvLink" href="#">Download CSV</a>
我有一个函数,它 return 一个 CSV 字符串供
使用anchorEle.href = `data:text/csv;charset=utf-8,${encodeURI(csvContent)}`
如果我有这样的数组:-
[
[
"Test,Me,Once,More",
"Successful"
],
[
"Test1,Me1,Once1,More1",
"Successful"
]
]
当我的项目中有逗号时,CSV 字符串的构造会出错。我不能根据逗号的数量设置条件,因为它不是固定的用户要求。 我正在使用以下功能:-
function toCsv(arr) {
return arr.reduce((csvString, row) => {
csvString += row.join(',');
csvString += '\r\n';
return csvString;
}, '');
}
这将 return:-
Test,Me,Once,More,Successful
Test1,Me1,Once1,More1,Successful
当我下载为 CSV
我希望将 Test, Me, Once, More 作为 CSV 中的一项,保留逗号,如下所示:
RFC 4180 指定当您在字段中使用分隔符时(在您的例子中是逗号),您需要将字段括在双引号中
在您的情况下,您的文本文件输出需要如下所示:
"Test,Me,Once,More",Successful
"Test1,Me1,Once1,More1",Successful
您甚至可以将 Successful
括在双引号中。
您还需要在单元格中换行时使用双引号,但不要指望所有 CSV 解释器(例如 Excel)都能正确导入 line-break 个单元格。
正如 Dee J. Doena 所说,您应该对所有字符串值应用引号 ""
。此代码段给出了一个简单的简短示例,用于迭代数组数组并返回 CSV 字符串;
let arr = [ [ "Test,Me,Once,More", "Successful", 123 ], [ "Test1,Me1,Once1,More1", "Successful", 234 ] ];
let csvConvert = () => {
return arr.flatMap(t => t.map(o => typeof o === "string" ? `"${o}"` : o).join(",")).join("\n")
}
let anchorEle = document.getElementById("csvLink")
anchorEle.href = `data:text/csv;charset=utf-8,${encodeURI(csvConvert())}`;
<a id="csvLink" href="#">Download CSV</a>