在 JavaScript 中将对象数组转换为 CSV 字符串。
由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!
工作中,有时我们需要在服务器端生成 CSV 字符串,并将其发送到前端应用程序,以便用户可以下载电子表格文件(例如报告)。
当然,市面上已经有一些软件包可以处理各种 CSV 用例,但我们只是想要一个简单的 JavaScript 解决方案,因为我们知道来自数据库的数据结构始终是一个对象数组。
不过在继续之前,值得一提的是,我们将在解决方案中使用一些您可能已经熟悉也可能不熟悉的 JavaScript 方法和技巧:
如果您现在对以上内容感到有些陌生,请随时暂停片刻,先了解一下,等您更熟悉之后再回来。
欢迎回来,如果你休息了这段时间的话👋
那么,我们如何将对象数组转换为 CSV 字符串,同时确保列标题和行中显示正确的数据呢?
我们先来创建对象数组:
const itemsArray = [
{ itemId: 1, itemRef: "Item 001" },
{ itemId: 2, itemRef: "Item 002" },
{ itemId: 3, itemRef: "Item 003" }
];
创建 CSV 字符串的第一步是定义列标题并将键值对提取到各自的数组中:
const csvString = [
[
"Item ID",
"Item Reference"
],
...itemsArray.map(item => [
item.itemId,
item.itemRef
])
];
console.log(csvString);
/*
[
["Item ID", "Item Reference"],
[1, "Item 001"],
[2, "Item 002"],
[3, "Item 003"]
]
*/
现在我们已经将所有数据放在数组中,我们可以使用我们的.map()和.join()方法将所有内容整合在一起:
const csvString = [
[
"Item ID",
"Item Reference"
],
...itemsArray.map(item => [
item.itemId,
item.itemRef
])
]
.map(e => e.join(","))
.join("\n");
console.log(csvString);
/*
"Item ID,Item Reference
1,Item 001
2,Item 002
3,Item 003"
*/
那么接下来会发生什么呢?首先,第一个map/join组合将四个数组合并成一个包含标题和键值对的单一数组,键值对的数据类型为字符串,例如“1,Item 001”。然后,最后一个join组合将这个单一数组转换为字符串。
在这篇文章中,我们使用了一些有用的数组方法和 JavaScript 中的扩展语法,成功地将对象数组转换为 CSV 字符串。
请复制并尝试以上代码,如有任何疑问,欢迎在此处或Twitter上向我提问。
感谢阅读!
文章来源:https://dev.to/samueldjones/convert-an-array-of-objects-to-csv-string-in-javascript-337d