简介
数组、对象、CSV、表格、工具
我们在 每日 30 秒之 arrayToCSV 中一起学习了将数组数据转化为 csv 表格数据并导出,那如果是对象数组怎么办呢?小脑袋瓜转得快的同学肯定会说:“使用 Array.prototype.map 把需要导出的字段先遍历取出,再使用 arrayToCSV 将其导出为 CSV 数据表格。”
可是你有没有想过如果一个对象数组数据非常之大时,使用 Array.prototype.map 和 arrayToCSV 将会多出一倍的数据遍历操作。作为优化狂魔的我们(那之前文章的使用场景还这么用!!!)肯定不允许这种事情发生,那就一起来学习一个用于对象数组且少花一半时间的转换表格函数。
// 该源码来自于 https://30secondsofcode.org const JSONtoCSV = (arr, columns, delimiter = ",") => [ columns.join(delimiter), ...arr.map(obj => columns.reduce( (acc, key) => `${acc}${!acc.length ? "" : delimiter}"${obj[key] || ""}"`, "" ) ) ].join(" ");代码分析
把传入需要提取的对象属性作为表头用分隔符分割开来:
columns.join(delimiter)
使用 Array.prototype.map 来遍历对象数组获得 表头属性属性对应的值 并将其解构开:
...arr.map(obj => fn)
当属性不存在时利用 || 技巧来初始化数据,并利用 Array.prototype.reduce 来拼接数据,注意 分隔符 应该在每两个数据之间:
columns.reduce((acc, key) => { let value = obj[key] || "" acc += !acc.length ? "" : delimiter acc += `"${value}"` }, "")
把表头数组和对应的属性数据组成的数组用 来拼接数据:
[..., ...].join(" ")使用场景
将页面上用户数据导出为 Excel 表格并且提供下载,本文的 JSONtoCSV 直接使用属性作为表头数据,机智的同学可以自己增加上表头默认字段来将 JSONtoCSV 函数变得更加完美。
download
const users = [ { name: "xiaoer", age: 24, sex: "男" }, { name: "xiaosi", age: 8, sex: "男" }, { name: "menty", age: 18, sex: "女" }, ] function downloadUserData(target) { const csv = JSONtoCSV(users, ["name", "age", "sex"]) target.href = `data:text/csv;charset=utf-8,ufeff${csv}` }
同为面向百度编程的同学直接使用 data:text/csv;charset=utf-8,${csv} 来导出数据会出现乱码,而本文中相对网络上的版本增加了 ufeff 这个BOM头来告诉 Excel 数据为 UTF-8 编码解决乱码问题。想知道更多关于 BOM 头的内容可以查看 你所不知道的 BOM。
一起成长在困惑的城市里总少不了并肩同行的 伙伴 让我们一起成长。
如果您想让更多人看到文章可以点个 点赞。
如果您想激励小二可以到 Github 给个 小星星。
如果您想与小二更多交流添加微信 m353839115。
本文原稿来自 PushMeTop
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/109123.html
简介 数组、CSV、表格、工具 showImg(https://segmentfault.com/img/bVbp3L5?w=900&h=500); 我们之前的两期 数组转 CSV 表格数据 和 JSON 对象数组转换 CSV 表格数据 中学习了转化为 CSV 表格数据的代码片段,今天就讲讲 如何把 CSV 表格数据转换为 JSON 对象: // 该源码来自于 https://30secondso...
showImg(https://segmentfault.com/img/remote/1460000018771004?w=900&h=500); 简介 数组、CSV、表格、工具 将一个数组转化为逗号为分割符的字符串(CSV)即表格数据。 // 该源码来自于 https://30secondsofcode.org const arrayToCSV = (arr, delimiter = ,) =...
showImg(https://segmentfault.com/img/remote/1460000018796041?w=900&h=500); 简介 字符串、数字、布尔值、Null、Undefined、对象、数组、函数、判断方法 JavaScript 中有两种数据类型,分别是基本数据类型和引用数据类型: 基本数据类型 引用数据类型 Number、String、Boolean、Null...
摘要:如果该文件已存在,文件指针将会放在文件的结尾。运行结果以上是读取文件的方法。为了输出中文,我们还需要指定一个参数为,另外规定文件输出的编码。 上一篇文章:Python3网络爬虫实战---30、解析库的使用:PyQuery下一篇文章:Python3网络爬虫实战---32、数据存储:关系型数据库存储:MySQL 我们用解析器解析出数据之后,接下来的一步就是对数据进行存储了,保存的形式可以...
showImg(https://segmentfault.com/img/remote/1460000018770987?w=900&h=500); 简介 数组、every、any 判断一个数组中是否都满足特定的条件,如果满足则返回 true 否则返回 false。 // 该源码来自于 https://30secondsofcode.org const all = (arr, fn = Boole...
阅读 3019·2021-11-22 09:34
阅读 3551·2021-08-31 09:45
阅读 3683·2019-08-30 13:57
阅读 1640·2019-08-29 15:11
阅读 1653·2019-08-28 18:04
阅读 3181·2019-08-28 17:59
阅读 1529·2019-08-26 13:35
阅读 2161·2019-08-26 10:12