JavaScript 数组到 CSV

标签 javascript arrays csv

我已经关注了这篇文章 How to export JavaScript array info to csv (on client side)?获取写入为 csv 文件的嵌套 js 数组。

数组看起来像:

var test_array = [["name1", 2, 3], ["name2", 4, 5], ["name3", 6, 7], ["name4", 8, 9], ["name5", 10, 11]];

除了在 csv 文件的第三行之后所有其他值都在同一行之外,链接中给出的代码工作得很好 例如

姓名 1,2,3
名字2,4,5
姓名 3,6,7
name4,8,9name5,10,11 等等等等

谁能解释这是为什么?使用 Chrome 或 FF 也是如此。

谢谢

编辑

jsfiddle http://jsfiddle.net/iaingallagher/dJKz6/

伊恩

最佳答案

引用的答案是错误的。你必须改变

csvContent += index < infoArray.length ? dataString+ "\n" : dataString;

csvContent += dataString + "\n";

至于为什么引用的答案是错误的(有趣的是它被接受了!):indexforEach回调函数的第二个参数,是循环数组,将它与 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 test测试是否为了以逗号分隔的方式连接字符串,将它们插入数组并加入数组更快,或者先用逗号连接它们,然后使用 += 运算符直接连接结果字符串.

请点击链接并运行测试,以便我们有足够的数据来谈论事实而不是观点。

关于JavaScript 数组到 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18848860/

相关文章:

php - 从 CSV 中抓取,序列化选定的字段并修改 CSV

python - 使用 Pandas 读取 CSV 时如何在列中保持前导零?

javascript - 按需更改 extjs 4.1 存储中的数据

javascript - 在 2 行之间放置一个复选框 jquery MVC

javascript - date-fns 在 Safari 上返回无效日期

c - 修改字符串数组

ruby - 如何用不在引号中的冒号分隔字符串

javascript - bokehjs 中多行的数据格式

java - 如何使用具有给定整数数组的 IntStream 生成反转整数数组

python - 在 NumPy 中交换数组数据