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