2016-08-24 6 views
5

Jestem początkującym początkującym i trochę się uczę, próbując przeciągnąć łańcuch ewolucji dla każdego pokemona za pomocą pokeapi, ale mając trudny czas z powodu głębokiego zagnieżdżenia.PokeAPI + Angular: Jak uzyskać ewolucyjny łańcuch pokemonów?

Typowa reakcja obiekt jest zwracany tak:

{ 
    "baby_trigger_item": null, 
    "id": 2, 
    "chain": { 
    "evolution_details": [], 
    "evolves_to": [ 
     { 
     "evolution_details": [ 
      { 
      "min_level": 16, 
      "min_beauty": null, 
      "time_of_day": "", 
      "gender": null, 
      "relative_physical_stats": null, 
      "needs_overworld_rain": false, 
      "turn_upside_down": false, 
      "item": null, 
      "trigger": { 
       "url": "http://pokeapi.co/api/v2/evolution-trigger/1/", 
       "name": "level-up" 
      }, 
      "known_move_type": null, 
      "min_affection": null, 
      "party_type": null, 
      "trade_species": null, 
      "party_species": null, 
      "min_happiness": null, 
      "held_item": null, 
      "known_move": null, 
      "location": null 
      } 
     ], 
     "evolves_to": [ 
      { 
      "evolution_details": [ 
       { 
       "min_level": 36, 
       "min_beauty": null, 
       "time_of_day": "", 
       "gender": null, 
       "relative_physical_stats": null, 
       "needs_overworld_rain": false, 
       "turn_upside_down": false, 
       "item": null, 
       "trigger": { 
        "url": "http://pokeapi.co/api/v2/evolution-trigger/1/", 
        "name": "level-up" 
       }, 
       "known_move_type": null, 
       "min_affection": null, 
       "party_type": null, 
       "trade_species": null, 
       "party_species": null, 
       "min_happiness": null, 
       "held_item": null, 
       "known_move": null, 
       "location": null 
       } 
      ], 
      "evolves_to": [], 
      "is_baby": false, 
      "species": { 
       "url": "http://pokeapi.co/api/v2/pokemon-species/6/", 
       "name": "charizard" 
      } 
      } 
     ], 
     "is_baby": false, 
     "species": { 
      "url": "http://pokeapi.co/api/v2/pokemon-species/5/", 
      "name": "charmeleon" 
     } 
     } 
    ], 
    "is_baby": false, 
    "species": { 
     "url": "http://pokeapi.co/api/v2/pokemon-species/4/", 
     "name": "charmander" 
    } 
    } 
} 

muszę dostać się do evolves_to własności i grab species.name jak evolution_details.min_level i evolution_details.trigger.name i evolution_details.item jeśli nie zerowy

Ale jak widać, właściwość evolves_to sama zawiera inny evolves_to zagnieżdżony wewnątrz, która ma inny zagnieżdżony wewnątrz

to moja smutna próba (po http.get) i jestem po prostu zatrzymany teraz.

var evoObject = response.data; 

function loopEvo(obj){ 
    angular.forEach(obj, function(value, key, object){ 
     if (key == 'evolves_to' && value != []) { 
      //from here I can get top level data, but... 
     } 
    }); 
} 

loopEvo(evoObject.chain); 

Nie wiem, jak rekurencyjnie nurkować w obiektach i stale pobierać dane, czy ktoś może udzielić jakiejkolwiek pomocy? Chciałbym użyć tego jako wspaniałej możliwości uczenia się podczas przechodzenia przez złożone obiekty JSON.

Odpowiedz

1

Zawsze możesz po prostu unikać używania Angulara i trzymać zwykły JS, aby zbudować swój łańcuch ewolucji ... spróbuj to zrobić, opiera się na twojej pętli kątowej. To powinno pozostawić ci tablicę (evoChain) obiektów zawierających dane, których szukasz, uporządkowanych od pierwszej ewolucji w indeksie 0 do ostatniej ewolucji na ostatnim indeksie.

var evoChain = []; 
var evoData = response.data.chain; 

do { 
    var evoDetails = evoData['evolution_details'][0]; 

    evoChain.push({ 
    "species_name": evoData.species.name, 
    "min_level": !evoDetails ? 1 : evoDetails.min_level, 
    "trigger_name": !evoDetails ? null : evoDetails.trigger.name, 
    "item": !evoDetails ? null : evoDetails.item 
    }); 

    evoData = evoData['evolves_to'][0]; 
} while (!!evoData && evoData.hasOwnProperty('evolves_to')); 

W twoim przypadku próbki powyżej otrzymanej tablicy powinna wyglądać następująco:

[{ 
    "species_name": "charmander", 
    "min_level": 1, 
    "trigger_name": null, 
    "item": null 
}, { 
    "species_name": "charmeleon", 
    "min_level": 16, 
    "trigger_name": "level-up", 
    "item": null 
}, { 
    "species_name": "charizard", 
    "min_level": 36, 
    "trigger_name": "level-up", 
    "item": null 
}] 
+0

Działa to dokładnie tak, jak pan powiedział, wow! W trosce o naukę postaram się zbadać to i zobaczyć, czy mogę zrobić coś podobnego "kanciastą drogą", ale to jest wielkie dzięki! – coderpolarbear

Powiązane problemy