Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将动态JSON对象数组导出到CSV中?_Javascript_Angular_Typescript_Csv - Fatal编程技术网

Javascript 如何将动态JSON对象数组导出到CSV中?

Javascript 如何将动态JSON对象数组导出到CSV中?,javascript,angular,typescript,csv,Javascript,Angular,Typescript,Csv,我正在尝试将一组JSON对象导出到CSV,它们的键值对数量可能会有所不同(这意味着某些对象可能比其他对象有更多的列)。我目前可以使用Angular2CSV包导出,但它只支持包含所有列的情况 下面的代码显示了我当前的实现,其中服务返回要下载的数据 private exportTable(){ this.service.exportDataForDownload().then(response => { let csvFileName = "Result

我正在尝试将一组JSON对象导出到CSV,它们的键值对数量可能会有所不同(这意味着某些对象可能比其他对象有更多的列)。我目前可以使用Angular2CSV包导出,但它只支持包含所有列的情况

下面的代码显示了我当前的实现,其中服务返回要下载的数据

private exportTable(){
        this.service.exportDataForDownload().then(response => {
            let csvFileName = "Results";
            new Angular2Csv(response, csvFileName, {headers: this.tableheaders});

        });
    }
基于此问题(),您可能会找到一个更具动态性的解决方案:

该问题的解决方案类似于:

new Angular2Csv(this.data, 'myCsv', { headers: Object.keys(this.data[0]) });
基于此:

创建包含唯一标题的集:

let headerSet = new Set();
对于响应中的每一行,获取该行的键并将它们添加到集合中(伪代码)

对于数据部分,您必须重新运行流程,并检查每一行是否有某个键,如果没有,则需要将缺少的键放入并清空值或其他您喜欢的内容(这很棘手,因为所有值都需要按正确的顺序插入,所以仅使用一个设置的解决方案可能不够)

添加所有可能的标题/数据时:

new Angular2Csv(response, csvFileName, {headers: Array.from(headerSet});

需要编写准确的代码。我没有检查,也不知道数据格式是什么。

您可以填充对象以包含最多n(最大)列数的空单元格吗?这似乎是最明智的做法,在传入数据之前对其进行规范化。
new Angular2Csv(response, csvFileName, {headers: Array.from(headerSet});