Как посчитать достижения по жанру из массива игровых объектов? - PullRequest
0 голосов
/ 19 февраля 2020

Извините, если раньше задавалось нечто подобное, но я не мог придумать, как сформулировать свой вопрос, чтобы найти результат!

Если у меня есть массив игровых объектов ...

const games = [{title: 'Halo 3', genre: 'FPS', achievements: 7}, {title: 'Fallout 3', genre: 'RPG', achievements: 6}, {title: 'Far Cry 3', genre: 'FPS', achievements: 12}]

Как получить следующий результат, который складывает достижения по жанру?

{ FPS: 19, RPG: 6}

Вот что у меня есть, что не совсем верно:

const achievementsByGenreTally = (games, dataKey = 'genre') => {
return games
  .reduce((acc, game) => {
    if (game[dataKey]) {
      acc[game[dataKey]] = game.achievements }
    return acc
    }, {})      

};

Любая помощь будет принята с благодарностью! Спасибо:)

1 Ответ

1 голос
/ 19 февраля 2020

Ваше решение почти правильное, но вам нужно суммировать все значения достижений, а не просто присваивать их свойствам объектов (также вам нужно обрабатывать случай, когда свойство отсутствует, потому что если вы пытаетесь суммировать любое число с помощью undefined вы получите NaN).

const achievementsByGenreTally = (games, dataKey = 'genre') => {
    return games
        .reduce((acc, game) => {
            if (game[dataKey]) {
                acc[game[dataKey]] = (acc[game[dataKey]] || 0) + game.achievements
            }
            return acc
        }, {})
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...