Напротив Array.reduce () в NodeJS - PullRequest
0 голосов
/ 01 мая 2020

В моем примере я извлекаю данные из листа, используя Google Sheet API и NodeJS.

Данные возвращаются, как указано на первом рисунке, поэтому я создал функцию Transform () для преобразования первой строки в качестве свойств моих объектов, результат на втором рисунке.

Мой вопрос заключается в том, как выполнить противоположную функцию и вернуть данные как он был расположен внутри большого массива в качестве первого изображения.

Transform = async (data, opt) => {
  const Objectproperties = (
    await gsapi.spreadsheets.values.get(opt)
  ).data.values[0].map((val) => val.replace(/\s/g, ""));
  const rows = data.filter((currentRow, index) => index != 0);
  const objects = rows.map((array) => {
    return array.reduce((accumulator, currentValue, index) => {
      return {
        ...accumulator,
        [Objectproperties[index]]: currentValue,
      };
    }, {});
  });

  app.use(
    "/items",
    router.get("/", function (req, res) {
      res.send(objects);
    })
  );

Picture1: отображение данных, поступающих с листа Picture2: использование первой строки в качестве свойства объектов

1 Ответ

1 голос
/ 01 мая 2020

Глядя на ваш код, ваша функция Reduce просто конвертирует массив в индексированный словарь. Таким образом, чтобы полностью изменить его, вам просто нужно извлечь значения словаря:

rows = objects.map((dict) => Object.values(dict))
...