Как добавить несколько значений в существующие ключи для массива объектов? - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь использовать reduce() для получения экономического тарифа для конкретной калитки.

Пример данных:

   var data = [
    {wicket:0, econ:20 },
    {wicket:1, econ:10 },
    {wicket:3, econ:45 },
    {wicket:0, econ:15 },
    {wicket:1, econ:32 }
]

Я хочу, чтобы reduce() метод возвращал массив объектов, который будет выглядеть следующим образом:

0: 20, 15
1: 10, 32
3: 45

То, что я пытаюсь сделать, это инициализировать аккумулятор с объектом, но в методе reduce() я не могу понять, как я могу получить требуемый массив объектов с key value как wicket и values как economy.

Мой код:

const Economy = data.reduce( (a, {econ, wicket}) => {

            a[wicket].push(econ);           

    },{})

Я получаю неопределенное поведение с приведенным выше кодом.

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Вы можете использовать группирование массива, используя reduce, например:

var data = [{"wicket":0,"econ":20},{"wicket":1,"econ":10},{"wicket":3,"econ":45},{"wicket":0,"econ":15},{"wicket":1,"econ":32}];

var result = data.reduce((c, v) => {
  c[v.wicket] = c[v.wicket] || []; //Initiate the property as empty array of it does not exist
  c[v.wicket].push(v.econ);
  return c;
}, {});

console.log(result);

|| является оператором ИЛИ.

Это означает, что если c[v.wicket] существует, он снова присвоит c[v.wicket]. Если это не так, присвойте пустой массив []

c[v.wicket] = c[v.wicket] || [];
0 голосов
/ 26 июня 2018

Если ваш data должен был быть Array, а не Object (что сейчас не является, по крайней мере, недопустимым):

let data = [
    {wicket:0, econ:20 },
    {wicket:1, econ:10 },
    {wicket:3, econ:45 },
    {wicket:0, econ:15 },
    {wicket:1, econ:32 }
];

let result = data.reduce((acc, curr) => {
  if(acc[curr.wicket]) acc[curr.wicket].push(curr.econ);
  else acc[curr.wicket] = [curr.econ];
  return acc;
},{});
console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...