从JSON数组中获取数据

时间:2016-07-10 15:02:29

标签: javascript arrays json asynchronous request

我从JSON数组中获取数据时遇到了一些麻烦。我使用node + async + request(和express ofc)。

部分代码:

 function(data, callback){
                var URL = 'https://'+ server + '.api.pvp.net/api/lol/' + serw + '/v1.3/stats/by-summoner/' + data.id + '/summary?season=SEASON2016&api_key=' + api;
                request(URL, function(err, response, body){
                    if(!err & response.statusCode == 200){
                        var json = JSON.parse(body);
                        var assists = json['playerStatSummaries'][0]['aggregatedStats'].totalAssists;

主要问题是[0]从数组中返回第一个对象。

{
   "playerStatSummaries": [
      {
         "playerStatSummaryType": "CAP5x5",
         "aggregatedStats": {
            "totalNeutralMinionsKilled": 2042,
            "totalMinionKills": 4317,
            "totalChampionKills": 350,
            "totalAssists": 417,
            "totalTurretsKilled": 36
         },
         "modifyDate": 1453276061000,
         "wins": 20
      },
      {
         "playerStatSummaryType": "CoopVsAI",
         "aggregatedStats": {
            "totalNeutralMinionsKilled": 446,
            "totalMinionKills": 6100,
            "totalChampionKills": 1092,
            "totalAssists": 761,
            "totalTurretsKilled": 116
         },
         "modifyDate": 1453276061000,
         "wins": 80
      },

有时阵列有点不同,如果玩家没有玩任何" CAP5x5"游戏中,COOPvsAI是[0]对象。

  

如何通过它的playerStatSummaryType而不是数组中的对象编号来获取数据?    或者如何在无法找到" CAP5x5"模式?感谢。

2 个答案:

答案 0 :(得分:1)

function filterOnPlayerStatSummary(myObject, filter)
{
    var result = [];
    for(var i = 0; i < myObject.length; i++) 
    {
        if (myObject[i].playerStatSummary == filter)
        { 
            result.push(myObject[i]);
        }
    }

    return result;
}

答案 1 :(得分:0)

如果您使用的是ES2015,则以下操作

let json = JSON.parse(body);
let assists = json
   .playerStatSummaries
   .filter((a) => a.playerStatSummaryType =='CAP5x5')
   .map((a) => a.aggregatedStats.totalAssists)
   .reduce((a,b)=>a+b)