- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从 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/
最近开始学习react。我正在使用 pokeAPI 制作一个图鉴应用程序。在卡片上,我需要获取每个口袋妖怪的类型。下面是我如何获取和保存口袋妖怪数据的示例。 useEffect(() => {
我有一个应用程序可以搜索宠物小 Sprite 的名称并读取数据,例如。姓名、高度、体重。现在说到能力,我无法理解能力名称的值(value)。 这是我的 app.js import React, { C
我是 React 和处理 JSON 的新手,但我在这里阅读了很多。所以我一直在尝试将从 pokeapi 获取的 JSON 传递给变量这是我到目前为止所得到的: getPokemons=(id)=> {
我是 Angular 的新手,我正在通过尝试使用 pokeapi 为每个 pokemon 拉动进化链来学习一些东西,但由于嵌套很深,所以遇到了困难。 一个典型的响应对象是这样返回的: { "bab
我正在尝试从 PokeAPI 获取进化链,stackoverflow 中的另一个答案帮助了我 How to get pokemon's evolution chain 顺便说一句,我不明白如何从“ev
我正在尝试在我正在开发的应用程序中使用 PokéAPI 查找并使用语言 JSON 端点的英文翻译。在提交对如下所示网址之一的调用时,我需要使用翻译。不幸的是,英语语言键在数组响应中并不总是按相同的顺序
我是一名优秀的程序员,十分优秀!