如何根据逗号将数组转换为 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>