javascript - PokeAPI : get complex evolution chain

我正在尝试从 PokeAPI 获取进化链,stackoverflow 中的另一个答案帮助了我 How to get pokemon's evolution chain

顺便说一句,我不明白如何从“evolves_to array”中获取所有元素,然后返回到更高级别以转到数组本身的下一个元素。例如,我想得到一个这样的数组:

    [{
    "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
}]

但是从像这样的 JSON 中,“evolves_to”数组包含多个元素:

{
    "baby_trigger_item": null,
    "chain": {
        "evolution_details": [],
        "evolves_to": [
            {
                "evolution_details": [
                    {
                        "gender": null,
                        "held_item": null,
                        "item": null,
                        "known_move": null,
                        "known_move_type": null,
                        "location": null,
                        "min_affection": null,
                        "min_beauty": null,
                        "min_happiness": null,
                        "min_level": 7,
                        "needs_overworld_rain": false,
                        "party_species": null,
                        "party_type": null,
                        "relative_physical_stats": null,
                        "time_of_day": "",
                        "trade_species": null,
                        "trigger": {
                            "name": "level-up",
                            "url": "https://pokeapi.co/api/v2/evolution-trigger/1/"
                        },
                        "turn_upside_down": false
                    }
                ],
                "evolves_to": [
                    {
                        "evolution_details": [
                            {
                                "gender": null,
                                "held_item": null,
                                "item": null,
                                "known_move": null,
                                "known_move_type": null,
                                "location": null,
                                "min_affection": null,
                                "min_beauty": null,
                                "min_happiness": null,
                                "min_level": 10,
                                "needs_overworld_rain": false,
                                "party_species": null,
                                "party_type": null,
                                "relative_physical_stats": null,
                                "time_of_day": "",
                                "trade_species": null,
                                "trigger": {
                                    "name": "level-up",
                                    "url": "https://pokeapi.co/api/v2/evolution-trigger/1/"
                                },
                                "turn_upside_down": false
                            }
                        ],
                        "evolves_to": [],
                        "is_baby": false,
                        "species": {
                            "name": "beautifly",
                            "url": "https://pokeapi.co/api/v2/pokemon-species/267/"
                        }
                    },
                    {
                        "evolution_details": [
                            {
                                "gender": null,
                                "held_item": null,
                                "item": null,
                                "known_move": null,
                                "known_move_type": null,
                                "location": null,
                                "min_affection": null,
                                "min_beauty": null,
                                "min_happiness": null,
                                "min_level": 7,
                                "needs_overworld_rain": false,
                                "party_species": null,
                                "party_type": null,
                                "relative_physical_stats": null,
                                "time_of_day": "",
                                "trade_species": null,
                                "trigger": {
                                    "name": "level-up",
                                    "url": "https://pokeapi.co/api/v2/evolution-trigger/1/"
                                },
                                "turn_upside_down": false
                            }
                        ],
                        "evolves_to": [
                            {
                                "evolution_details": [
                                    {
                                        "gender": null,
                                        "held_item": null,
                                        "item": null,
                                        "known_move": null,
                                        "known_move_type": null,
                                        "location": null,
                                        "min_affection": null,
                                        "min_beauty": null,
                                        "min_happiness": null,
                                        "min_level": 10,
                                        "needs_overworld_rain": false,
                                        "party_species": null,
                                        "party_type": null,
                                        "relative_physical_stats": null,
                                        "time_of_day": "",
                                        "trade_species": null,
                                        "trigger": {
                                            "name": "level-up",
                                            "url": "https://pokeapi.co/api/v2/evolution-trigger/1/"
                                        },
                                        "turn_upside_down": false
                                    }
                                ],
                                "evolves_to": [],
                                "is_baby": false,
                                "species": {
                                    "name": "dustox",
                                    "url": "https://pokeapi.co/api/v2/pokemon-species/269/"
                                }
                            }
                        ],
                        "is_baby": false,
                        "species": {
                            "name": "cascoon",
                            "url": "https://pokeapi.co/api/v2/pokemon-species/268/"
                        }
                    }
                ],
                "is_baby": false,
                "species": {
                    "name": "silcoon",
                    "url": "https://pokeapi.co/api/v2/pokemon-species/266/"
                }
            }
        ],
        "is_baby": false,
        "species": {
            "name": "wurmple",
            "url": "https://pokeapi.co/api/v2/pokemon-species/265/"
        }
    },
    "id": 135
}

那么,我怎样才能让它变平?感谢谁会回答我,抱歉我的英语不好。

最佳答案

我知道已经晚了,但对于更多的提问者,我用 C# 编写了这个算法,你带来了进化链并返回所有子链:

public static void PrintEvolutionChain(EvolutionChain pokemon)
    {
        int counter = 1;
        List<List<Pokemon>> pokemons = new List<List<Pokemon>>();
        List<Pokemon> pokemonsTemp = new List<Pokemon>();

        foreach (EvolvesTo envolveTo in pokemon.envolvesTo)
        {
            pokemonsTemp.Add(pokemon.Pokemon);
            PrintPreorder(envolveTo,pokemons,pokemonsTemp);
        }
        foreach (List<Pokemon> pokemones in pokemons)
        {
            Console.WriteLine($"Chain: {counter}");
            foreach (Pokemon pokemonchain in pokemones)
            {
                Console.WriteLine($"Pokemon: {pokemonchain.Name}");
            }
            counter++;
        }
        
    }
    public static void PrintPreorder(EvolvesTo pokemon, List<List<Pokemon>> pokemons, List<Pokemon> pokemonsTemp)
    {
        pokemonsTemp.Add(pokemon.pokemon);
        if (pokemon == null || pokemon.envolvesTo.Count == 0 )
        {
            pokemons.Add(new List<Pokemon>(pokemonsTemp));
            pokemonsTemp.Clear();
            return;
        }
        if(pokemon.envolvesTo.Count == 1)
        {
            foreach (EvolvesTo envolveTo in pokemon.envolvesTo)
            {
                PrintPreorder(envolveTo, pokemons, pokemonsTemp);
            }
        }
        else if (pokemon.envolvesTo.Count > 1){
            List<Pokemon> pokemonsTempTemp = new List<Pokemon>(pokemonsTemp);
            
            foreach (EvolvesTo envolveTo in pokemon.envolvesTo)
            {
                if (pokemonsTemp.Count == 0)
                    pokemonsTemp = pokemonsTempTemp;
                PrintPreorder(envolveTo, pokemons, pokemonsTemp);
            }
        }
    }

它可以更清洁,但如果您知道如何清洁它,目前可以使用,请在下面评论

关于javascript - PokeAPI : get complex evolution chain from JSON making it flatten,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54388625/

相关文章:

docker - 安装 rexray/ebs 时出错

c# - 继续获取 "Unable to load DLL ' SQLite.Interop.dll

maven - 如何重定向 maven surefire 插件 stdout*deferred 临时

nginx - 使用 apollo 客户端从 nextjs 中的 getInitialProps 方

laravel - 在 Scout 中使用更复杂的 where 子句

python - virtualenv 没有匹配的分布

clojure - 全栈 Clojure : How to get a Browser REPL a

node.js - 如何在 Nodejs 中将字符串作为读取流对象传递?

java - MockMvcRequestBuilders.asyncDispatch 提供一个空的

architecture - 已发布并等待对 RabbitMQ/EasyNetQ 主题的回应 - 如