🎶 Sym - 一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台

📕 思源笔记 - 一款桌面端笔记应用,支持 Windows、Mac 和 Linux

🎸 Solo - B3log 分布式社区的博客端节点,欢迎加入下一代社区网络

♏ Vditor - 一款浏览器端的 Markdown 编辑器

Array - JSONtoCSV (advanced)

2019-05-14

描述

把数组中的对象转换成以指定符号分割的值(CSV),且这些值仅包含了 columns 中所指定的。

提示

  • 创建表头:使用 Array.prototype.join(delimiter) 组合 columns 中的所有值
  • 使用 Array.prototype.map() 和 Array.prototype.reduce() 为数组中的每一个对象创建行
  • 每一行中只能包含 columns 所指定的属性值,不存在的值使用空字符串进行替代
  • 使用 Array.prototype.join('\n') 连接所有的行为一个字符串
  • 第三个参数 delimiter 的默认值为 ,

代码

const JSONtoCSV = (arr, columns, delimiter = ',') =>
  [
    columns.join(delimiter),
    ...arr.map(obj =>
      columns.reduce(
        (acc, key) => `${acc}${!acc.length ? '' : delimiter}"${!obj[key] ? '' : obj[key]}"`,
        ''
      )
    )
  ].join('\n');

示例

以纯文本形式存储数组对象中仅包含 a 和 b 的表格数据:

JSONtoCSV([{ a: 1, b: 2 }, { a: 3, b: 4, c: 5 }, { a: 6 }, { b: 7 }], ['a', 'b']); // 'a,b\n"1","2"\n"3","4"\n"6",""\n"","7"'
JSONtoCSV([{ a: 1, b: 2 }, { a: 3, b: 4, c: 5 }, { a: 6 }, { b: 7 }], ['a', 'b'], ';'); // 'a;b\n"1";"2"\n"3";"4"\n"6";""\n"";"7"'

返回总目录

每天 30 秒系列之 JavaScript 代码


欢迎注册黑客派社区,开启你的博客之旅。让学习和分享成为一种习惯!

推荐阅读
留下你的脚步