Javascript 对JSON文件进行分组和筛选

Javascript 对JSON文件进行分组和筛选,javascript,arrays,sorting,grouping,Javascript,Arrays,Sorting,Grouping,我必须按艺术家对这个JSON进行分组,并获得每个艺术家的总听众数量。一旦这样做了,我需要得到最倾听的艺术家和显示h的歌曲。最有效的方法是什么?我试过好几种方法,但都没有成功。有什么JS函数可以做吗 这是JSON: [ { "name": "The Less I Know the Better", "duration": "0", "listeners&

我必须按艺术家对这个JSON进行分组,并获得每个艺术家的总听众数量。一旦这样做了,我需要得到最倾听的艺术家和显示h的歌曲。最有效的方法是什么?我试过好几种方法,但都没有成功。有什么JS函数可以做吗

这是JSON:

[
    {
        "name": "The Less I Know the Better",
        "duration": "0",
        "listeners": "439958",
        "mbid": "",
        "url": "https://www.last.fm/music/Tame+Impala/_/The+Less+I+Know+the+Better",
        "artist": {
            "name": "Tame Impala",
            "mbid": "63aa26c3-d59b-4da4-84ac-716b54f1ef4d",
            "url": "https://www.last.fm/music/Tame+Impala"
        },
        "@attr": {
            "rank": "0"
        },
        "genre": "reggae"
    },
    {
        "name": "Creep",
        "duration": "239",
        "listeners": "1647583",
        "mbid": "d11fcceb-dfc5-4d19-b45d-f4e8f6d3eaa6",
        "url": "https://www.last.fm/music/Radiohead/_/Creep",
        "artist": {
            "name": "Radiohead",
            "mbid": "a74b1b7f-71a5-4011-9441-d0b5e4122711",
            "url": "https://www.last.fm/music/Radiohead"
        },
        "@attr": {
            "rank": "1"
        },
        "genre": "jazz"
    }
]
这个JSON文件就是一个例子,真正的JSON文件有800多行。我试着列出一个艺术家名单,但我无法计算出每个艺术家每首歌的总听众数。

类似这样的事情

const json=`
[{
“姓名”:“我知道的越少越好”,
“持续时间”:“0”,
“听众”:“439958”,
“mbid”:“,
“url”:”https://www.last.fm/music/Tame+黑斑羚/_/越少+我+知道+越好“,
“艺术家”:{
“名字”:“驯服的黑斑羚”,
“mbid”:“63aa26c3-d59b-4da4-84ac-716b54f1ef4d”,
“url”:”https://www.last.fm/music/Tame+黑斑羚“
},
“@attr”:{
“等级”:“0”
},
“流派”:“雷鬼”
},
{
“名称”:“爬行”,
“持续时间”:“239”,
“听众”:“1647583”,
“mbid”:“d11fcceb-dfc5-4d19-b45d-f4e8f6d3eaa6”,
“url”:”https://www.last.fm/music/Radiohead/_/Creep",
“艺术家”:{
“名称”:“无线电头”,
“mbid”:“a74b1b7f-71a5-4011-9441-d0b5e4122711”,
“url”:”https://www.last.fm/music/Radiohead"
},
“@attr”:{
“等级”:“1”
},
“流派”:“爵士乐”
},
{
“名称”:“例如Radiohead的其他歌曲”,
“持续时间”:“239”,
“听众”:“1647583”,
“mbid”:“d11fcceb-dfc5-4d19-b45d-f4e8f6d3eaa6”,
“url”:”https://www.last.fm/music/Radiohead/_/Creep",
“艺术家”:{
“名称”:“无线电头”,
“mbid”:“a74b1b7f-71a5-4011-9441-d0b5e4122711”,
“url”:”https://www.last.fm/music/Radiohead"
},
“@attr”:{
“等级”:“1”
},
“流派”:“爵士乐”
}
]`
康斯特艺术家={};
for(JSON.parse(JSON)的const song){
if(艺人[歌曲.艺人.姓名]){
艺术家[song.Artister.name].listeners+=parseInt(song.listeners,10);
艺术家[song.Artister.name].songs.push(song.name);
}否则{
艺人[歌曲.艺人.姓名]={
侦听器:parseInt(song.listeners,10),
歌曲:[歌曲名称],
};
}
}
console.log(艺术家)

const json=`
[{
“姓名”:“我知道的越少越好”,
“持续时间”:“0”,
“听众”:“439958”,
“mbid”:“,
“url”:”https://www.last.fm/music/Tame+黑斑羚/_/越少+我+知道+越好“,
“艺术家”:{
“名字”:“驯服的黑斑羚”,
“mbid”:“63aa26c3-d59b-4da4-84ac-716b54f1ef4d”,
“url”:”https://www.last.fm/music/Tame+黑斑羚“
},
“@attr”:{
“等级”:“0”
},
“流派”:“雷鬼”
},
{
“名称”:“爬行”,
“持续时间”:“239”,
“听众”:“1647583”,
“mbid”:“d11fcceb-dfc5-4d19-b45d-f4e8f6d3eaa6”,
“url”:”https://www.last.fm/music/Radiohead/_/Creep",
“艺术家”:{
“名称”:“无线电头”,
“mbid”:“a74b1b7f-71a5-4011-9441-d0b5e4122711”,
“url”:”https://www.last.fm/music/Radiohead"
},
“@attr”:{
“等级”:“1”
},
“流派”:“爵士乐”
},
{
“名称”:“例如Radiohead的其他歌曲”,
“持续时间”:“239”,
“听众”:“1647583”,
“mbid”:“d11fcceb-dfc5-4d19-b45d-f4e8f6d3eaa6”,
“url”:”https://www.last.fm/music/Radiohead/_/Creep",
“艺术家”:{
“名称”:“无线电头”,
“mbid”:“a74b1b7f-71a5-4011-9441-d0b5e4122711”,
“url”:”https://www.last.fm/music/Radiohead"
},
“@attr”:{
“等级”:“1”
},
“流派”:“爵士乐”
}
]`
康斯特艺术家={};
for(JSON.parse(JSON)的const song){
if(艺人[歌曲.艺人.姓名]){
艺术家[song.Artister.name].listeners+=parseInt(song.listeners,10);
艺术家[song.Artister.name].songs.push(song.name);
}否则{
艺人[歌曲.艺人.姓名]={
侦听器:parseInt(song.listeners,10),
歌曲:[歌曲名称],
};
}
}
console.log(艺术家)
您可以
reduce()。您还可以对侦听器进行连续计数,从而避免第二次迭代

结果是形状的
贴图

{
  "Artist1": {
    "songs": [
      {...},
      {...}
    ]
    "listeners": 0
  },
  "Artist2": {
    "songs": [
      {...},
      {...}
    ]
    "listeners": 0
  }
  ...
}
const歌曲=[
{
“姓名”:“我知道的越少越好”,
“持续时间”:“0”,
“听众”:“439958”,
“mbid”:“,
“url”:”https://www.last.fm/music/Tame+黑斑羚/_/越少+我+知道+越好“,
“艺术家”:{
“名字”:“驯服的黑斑羚”,
“mbid”:“63aa26c3-d59b-4da4-84ac-716b54f1ef4d”,
“url”:”https://www.last.fm/music/Tame+黑斑羚“
},
“@attr”:{
“等级”:“0”
},
“流派”:“雷鬼”
},
{
“名称”:“爬行”,
“持续时间”:“239”,
“听众”:“1647583”,
“mbid”:“d11fcceb-dfc5-4d19-b45d-f4e8f6d3eaa6”,
“url”:”https://www.last.fm/music/Radiohead/_/Creep",
“艺术家”:{
“名称”:“无线电头”,
“mbid”:“a74b1b7f-71a5-4011-9441-d0b5e4122711”,
“url”:”https://www.last.fm/music/Radiohead"
},
“@attr”:{
“等级”:“1”
},
“流派”:“爵士乐”
},
{
“姓名”:“去睡觉”,
“持续时间”:“239”,
“听众”:“16583”,
“mbid”:“d11fcceb-dfc5-4d19-b45d-f4e8f6d3eaa6”,
“url”:”https://www.last.fm/music/Radiohead/_/Go 睡觉“,
“艺术家”:{
“名称”:“无线电头”,
“mbid”:“a74b1b7f-71a5-4011-9441-d0b5e4122711”,
“url”:”https://www.last.fm/music/Radiohead"
},
“@attr”:{