Как сделать, чтобы уменьшить добавить все элементы в массив? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть файл данных, и я должен преобразовать его в другой формат, используя метод redu (), я написал код, но он не добавляет все элементы ...

ФАЙЛ ДАННЫХ: data.txt

Joey    Pizza    2
Joey    Sandwich    1
Joey    Burger    2
Chandler    Pizza    1
Chandler    Sandwich    0
Chandler    Burger    1

Ожидаемый результат

{
  "Joey": [
    {
      "Ordername": "Pizza",
      "Quantity": "2"
    },
    {
      "Ordername": "Sandwich",
      "Quantity": "1"
    },
    {
      "Ordername": "Burger",
      "Quantity": "2"
    }
  ],
  "Chandler": [
    {
      "Ordername": "Pizza",
      "Quantity": "1"
    },
    {
      "Ordername": "Sandwich",
      "Quantity": "0"
    },
    {
      "Ordername": "Burger",
      "Quantity": "1"
    }
  ]
}

Код, который я написал:

код. js

const fs = require('fs');

var output = fs
    .readFileSync('data.txt', 'utf8')
    .trim()
    .split('\n')
    .map((line) => line.split('    '))
    .reduce((acc, item) => {
        acc[item[0]] = [];
        acc[item[0]].push({ Ordername: item[1], Quantity: item[2] });
        return acc;
    }, {});

console.log(JSON.stringify(output, null, 2));

При запуске выше кода его выдача этот результат :

{
  "Joey": [
    {
      "Ordername": "Burger",
      "Quantity": "2\r"
    }
  ],
  "Chandler": [
    {
      "Ordername": "Burger",
      "Quantity": "1"
    }
  ]
}

Почему это только добавление третьего элемента в массив, а не все три элемента?

1 Ответ

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

Это потому, что вы всегда перезаписываете ключ именем:

acc[item[0]] = [];

, вместо этого вы должны сделать что-то вроде

if(!acc[item[0]]) {
  acc[item[0]] = []
}

acc[item[0]].push(...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...