2016-07-10 190 views
0

我從JSON數組中獲取數據時遇到了一些麻煩。我正在使用節點+異步+請求(和表達ofc)。代碼的
從JSON數組獲取數據

部分:

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」模式時,如何使某種旁路變爲空?謝謝。

+0

到你想要得到什麼? – 25r43q

+0

var assists = json ['playerStatSummaries'] [0] ['aggregatedStats']。totalAssists;給我一個總共1個對象的數組,我希望得到totalAssists但不使用[0],因爲有時如果玩家沒有玩過這種模式,[0]就完全不同了,它不會回報我需要的數據。 – BaSic

回答

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; 
} 
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)