Javascript 如何从一系列游戏对象中按类型计算成就?

Javascript 如何从一系列游戏对象中按类型计算成就?,javascript,arrays,object,Javascript,Arrays,Object,很抱歉,如果以前有人问过类似的问题,我想不出一个表达我的问题的方法来找到结果 如果我有一个游戏对象数组 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

很抱歉,如果以前有人问过类似的问题,我想不出一个表达我的问题的方法来找到结果

如果我有一个游戏对象数组

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
    }, {})      
})


任何帮助都将不胜感激!谢谢:

您的解决方案几乎是正确的,但您需要对所有成就值求和,而不仅仅是将它们分配给对象的属性。此外,您还需要处理属性丢失时的情况,因为如果您尝试对任何未定义的数字求和,您将得到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
        }, {})
};