Skip to content

Latest commit

 

History

History
54 lines (41 loc) · 1.95 KB

json-to-csv.md

File metadata and controls

54 lines (41 loc) · 1.95 KB
标题 标签
JSONtoCSV(将 JSON 对象数组转换成逗号分割的字符串) array,string,object,advanced(数组,字符串,对象,高级的)

将对象数组转换为仅包含指定列的逗号分隔值(CSV)字符串。

  • 使用Array.prototype.join(delimiter)方法根据传入的columns数组参数来组合所有名称以创建第一行。
  • 使用Array.prototype.map()Array.prototype.reduce()为每个对象创建一行,用空字符串替换不存在的值,仅映射columns参数中对应的值。
  • 使用Array.prototype.join('\n')方法将所有行合并为一个字符串。
  • 如果不传入第三个参数delimiter,则使用默认的delimiter(分隔符),即','。

代码如下:

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

ts代码如下:

调用方式:

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"'

应用场景

以下是基于上述代码实现的示例:

结果如下:

<iframe src="codes/javascript/html/json-to-csv.html"></iframe>