被引用的答案是错误的。你需要进行更改。
csvContent += index < infoArray.length ? dataString+ "\n" : dataString;
到
csvContent += dataString + "\n";
关于为什么引用的答案是错误的(很有趣,竟然被接受了!):forEach
回调函数的第二个参数index
是循环数组时的索引,将其与infoArray
的大小进行比较没有意义,因为infoArray
是该数组的一个项(也恰好是一个数组)。
编辑
现在我写下这篇答案已经过去六年了。许多事情已经发生了变化,包括浏览器。以下是答案的一部分:
开始陈旧的部分
顺便说一下,引用的代码不太优化。您应该避免重复附加字符串。您应该改为附加到一个数组中,并在最后执行array.join("\n")。像这样:
var lineArray = [];
data.forEach(function (infoArray, index) {
var line = infoArray.join(",");
lineArray.push(index == 0 ? "data:text/csv;charset=utf-8," + line : line);
});
var csvContent = lineArray.join("\n");
年迈部分结束
需要记住的是,与通用字符串连接不同,CSV案例有一点不同,因为对于每个字符串,您还必须添加分隔符。
无论如何,上面似乎不再成立了,至少对于Chrome和Firefox来说不再成立(尽管似乎对于Safari仍然成立)。
为了消除不确定性,我写了一个jsPerf测试,测试在以逗号分隔的方式连接字符串时,将它们推入数组并连接数组是否更快,还是先使用逗号将它们连接起来,然后直接使用+=运算符将它们与结果字符串连接。
请点击链接运行测试,这样我们就有足够的数据来谈论事实而不是观点。
Blob
和URL
。 [1] https://dev59.com/LWUp5IYBdhLWcg3w5KvV#24922761 - Gabriel L. Oliveira