Как экспортировать данные в CSV, используя Javascript? - PullRequest
1 голос
/ 21 апреля 2020

Мне удалось написать скрипт для экспорта данных из запроса GET в Javascript в CSV. Однако у меня есть переменная unit, которая имеет больше полей (время, высота, широта, o3, co2, ch2o). Как я могу создать CSV с большим количеством столбцов со значениями, взятыми из сценария?

Пока мне удалось создать CSV с несколькими заголовками, но я не знаю, как заполнять строки CSV данными. Мне удалось полностью заполнить только один столбец.

В приведенной ниже функции я использовал unit[Object.keys(unit)[4]] только для получения co2 данных. Как я могу добавить данные в каждый столбец?

function download_csv(data, sensor) {
  var csv = 'Day, altitude, latitude, o3, co2, ch2o\n';
  for (var index in data) {
    if (!data.hasOwnProperty(index)) continue;
    var unit = data[index];
    csv += unit[Object.keys(unit)[4]];
    csv += "\n";
  }
  var hiddenElement = document.createElement('a');
  hiddenElement.href = 'data:text/csv;charset=utf-8,' + encodeURI(csv);
  hiddenElement.target = '_blank';
  hiddenElement.download = sensor + '.csv';
  hiddenElement.click();
}

Данные имеют следующий формат: enter image description here

1 Ответ

1 голос
/ 21 апреля 2020

Предполагая, что аргумент data содержит массив объектов, которые вы используете для построения данных CSV, вы можете использовать Object.keys() и Object.value() для динамического построения данных. При использовании этого метода не имеет значения, какие имена ключей или сколько их содержится в данных.

function download_csv(data, sensor) {
  let csvHeader = Object.keys(data[0]).join(',') + '\n'; // header row
  let csvBody = data.map(row => Object.values(row).join(',')).join('\n');

  var hiddenElement = document.createElement('a');
  hiddenElement.href = 'data:text/csv;charset=utf-8,' + encodeURI(csvHeader + csvBody);
  hiddenElement.target = '_blank';
  hiddenElement.download = sensor + '.csv';
  hiddenElement.click();
}

let data = [{
  lorem: 'ipsum',
  foo: 'bar',
  fizz: 'buzz'
}];
download_csv(data, 'foobar');

Стоит отметить, что для поддержки устаревших браузеров Object.values не поддерживается в IE. Однако есть полифилл .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...