作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试将一组 JSON 对象导出为 CSV,而键值对的数量可能会有所不同(这意味着有些列可能比其他列多)。我目前能够使用 Angular2CSV 包导出,但它只支持包含所有列的情况。
下面的代码显示了我当前的实现,其中服务返回要下载的数据。
private exportTable(){
this.service.exportDataForDownload().then(response => {
let csvFileName = "Results";
new Angular2Csv(response, csvFileName, {headers: this.tableheaders});
});
}
最佳答案
基于这个问题 (https://github.com/javiertelioz/angular2-csv/issues/27),您可能会找到更动态解决方案的灵感:
这个问题的解决方案是这样的:
new Angular2Csv(this.data, 'myCsv', { headers: Object.keys(this.data[0]) });
基于此:
创建一个集合以包含唯一的标题:
let headerSet = new Set();
对于响应中的每一行,获取该行的键并将它们添加到集合中(伪代码)
for (r of/in response) {
headerSet.add(Object.keys(r));
}
对于数据部分,你必须重新运行这个过程并检查每一行是否有一个特定的键,如果没有你需要用那个丢失的键输入和清空值或你喜欢的东西(这很棘手由于所有值都需要以正确的顺序插入,因此仅使用 Set 解决方案可能还不够)。
当添加/添加所有可能的标题/数据时:
new Angular2Csv(response, csvFileName, {headers: Array.from(headerSet});
需要编写确切的代码。我没有检查也不知道数据格式是什么。
关于javascript - 如何在 Angular 中将动态 JSON 对象数组导出为 CSV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55505419/
我是一名优秀的程序员,十分优秀!