Я пытаюсь экспортировать массив объектов JSON в CSV, который может варьироваться в зависимости от количества пар ключ-значение (это означает, что некоторые могут иметь дополнительные столбцы, чем остальные). В настоящее время я могу экспортировать с помощью пакета Angular2CSV, но он поддерживает только при условии, что включены все столбцы.
В приведенном ниже коде показана моя текущая реализация, в которой служба возвращает данные для загрузки.
private exportTable(){
this.service.exportDataForDownload().then(response => {
let csvFileName = "Results";
new Angular2Csv(response, csvFileName, {headers: this.tableheaders});
});
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Основываясь на этой проблеме (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});
Точный код должен быть составлен. Я не проверял и не знаю, что такое формат данных.
Можете ли вы дополнить свои объекты, чтобы включить пустые ячейки до n (макс.) количества столбцов? Это кажется наиболее разумным, чтобы нормализовать ваши данные перед их передачей.