2016-07-10 4 views
0

У меня есть некоторые проблемы с получением данных из массива JSON. Я использую node + async + request (и express 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 вместо номера объекта в массиве? Или как сделать какой-то обход, который делает null, когда не удается найти режим «CAP5x5»? Благодарю.

+0

Что вы хотите получить? – 25r43q

+0

var assists = json ['playerStatSummaries'] [0] ['aggregatedStats']. TotalAssists; Дает мне 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) 
Смежные вопросы