Как экспортировать массив динамических объектов JSON в CSV в Angular?

Я пытаюсь экспортировать массив объектов JSON в CSV, который может варьироваться в зависимости от количества пар ключ-значение (это означает, что некоторые могут иметь дополнительные столбцы, чем остальные). В настоящее время я могу экспортировать с помощью пакета Angular2CSV, но он поддерживает только при условии, что включены все столбцы.

В приведенном ниже коде показана моя текущая реализация, в которой служба возвращает данные для загрузки.

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

        });
    }

Можете ли вы дополнить свои объекты, чтобы включить пустые ячейки до n (макс.) количества столбцов? Это кажется наиболее разумным, чтобы нормализовать ваши данные перед их передачей.

Charlie Schliesser 04.04.2019 01:07
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
1
808
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Основываясь на этой проблеме (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});

Точный код должен быть составлен. Я не проверял и не знаю, что такое формат данных.

Другие вопросы по теме