Я хочу суммировать определенные значения в массиве объектов с помощью Reduce - PullRequest
0 голосов
/ 21 ноября 2019

Я хочу суммировать только профессиональных и элитных игроков, используя метод Reduce.

data = [ 
  { name: 'pro', players: 3 },
  { name: 'free', players: 8 },
  { name: 'elite', players: 1 } 
  ]

Я знаю, что Reduce возвращает общее количество игроков из 12, но я хочу только вернуть сумму профессиональных и элитных игроков.

Мой метод снижения пока что.

const players = data.reduce((accum, cur) => {
   return accum + cur.players;
}, 0);

Это возвращает 12.

Однако я хочу, чтобы оно вернуло только 4, добавив только профессиональных и элитных игроков.

1 Ответ

2 голосов
/ 21 ноября 2019

Вы можете добавить оператор if в функцию, которую вы передаете методу Reduce, который добавит аккумулятор только в том случае, если выполнено условие, иначе просто вернет аккумулятор ...

const players = data.reduce((accum, cur) => {
    if (cur.name === "pro" || cur.name === "elite") {
        return accum + cur.players;
    }
    return accum;
}, 0);

ИлиВы можете отфильтровать список и затем уменьшить его ...

const players = data
    .filter(item => item.name === "pro" || item.name === "elite")
    .reduce((accum, cur) => accum + cur.players, 0);

Документы для метода уменьшения и метода фильтрации великолепны.

Рабочая скрипка показывает оба варианта. (Откройте консоль разработчика, чтобы увидеть вывод)

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