Javascript 如何使用reduce()返回对象?

Javascript 如何使用reduce()返回对象?,javascript,functional-programming,Javascript,Functional Programming,编写一个名为getSongCountByArtist的函数,它接收歌曲数组并返回一个对象。对象中的关键点应该是艺术家名称,值应该是该艺术家在原始数组中的歌曲数 我的代码解决方案: 函数GetSongCountByArtister(arr){ 返回arr.reduce(功能(acc、val){ 让artistSong=val.name; let songNo=艺人Song.length; 返回acc[val.artist]+歌曲编号; }, {}) } getSongCountByArtist(

编写一个名为
getSongCountByArtist
的函数,它接收歌曲数组并返回一个对象。对象中的关键点应该是艺术家名称,值应该是该艺术家在原始数组中的歌曲数

我的代码解决方案:

函数GetSongCountByArtister(arr){
返回arr.reduce(功能(acc、val){
让artistSong=val.name;
let songNo=艺人Song.length;
返回acc[val.artist]+歌曲编号;
}, {})
}

getSongCountByArtist(歌曲)//NaN
我找到了解决办法。我重构了代码,现在它返回了正确的数据。请看下面

function getSongCountByArtist(arr) {
    return arr.reduce(function (acc, val) {
      if (acc[val.artist] === undefined) acc[val.artist] = 0;
      acc[val.artist]++;
      return acc;
    }, {});
  } 
//test
getSongCountByArtist(songs);

谢谢

更改
返回acc[val.artist]+songNo
acc[val.artist]=songNo;返回acc。但是,执行'let songNo=artistSong.length;`这可能也是错误的。它似乎在计算艺术家名字上的字符数。但是,如果不知道输入数据的结构,我们就无法帮助解决这个问题。嗨,菲利克斯!输入数据是歌曲对象的数组。您可以在这里查看它,但我已经重构了代码,现在它可以工作了。请看下面我的答案。非常感谢。