You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术问询:对象数组取值打印键与宝可梦进化查询函数实现

让我一步步帮你解决这两个问题:

问题1:查找对象数组中存储的值,并打印对应的键

要实现这个需求,我们可以遍历数组中的每个对象,再逐个检查对象的键值对,当值匹配目标时就打印对应的键。这里用一个具体的例子来演示:

假设我们有这样的对象数组:

const pokemonArray = [
  { id: 1, name: "Bulbasaur", type: "Grass" },
  { id: 2, name: "Charmander", type: "Fire" },
  { id: 3, name: "Squirtle", type: "Water" }
];

我们可以写一个通用函数来完成查找:

function printKeysByTargetValue(array, targetValue) {
  array.forEach(item => {
    // 将对象转换为键值对数组,方便遍历
    Object.entries(item).forEach(([key, value]) => {
      if (value === targetValue) {
        console.log(`匹配到的键:${key},对应的值:${value}`);
      }
    });
  });
}

// 调用函数,查找值为"Fire"的键
printKeysByTargetValue(pokemonArray, "Fire");

这段代码的逻辑是:

  • 用forEach遍历数组中的每个对象
  • 用Object.entries()把对象转换成[键, 值]的数组形式
  • 遍历这些键值对,当值等于目标值时,打印对应的键

如果需要处理更复杂的匹配(比如部分匹配、数字匹配),只需要修改if条件里的判断逻辑即可。

问题2:找出所有next_evolution包含指定名称的宝可梦

你的思路是对的,但有一个关键问题:数据集中的next_evolution是对象数组,每个元素都包含num和name字段,而不是字符串数组,所以直接用includes(nameOfPokemon)是无法匹配的。

我帮你修正了代码,同时优化了遍历方式(推荐用forEach替代for...in遍历数组,避免拿到原型链上的额外属性):

const infoOfPokemon = function(nameOfPokemon, allPokemon) {
  // 用于存储所有符合条件的宝可梦
  const matchingPokemons = [];

  allPokemon.forEach(pokemon => {
    // 先判断当前宝可梦是否有next_evolution,并且是数组类型
    if (pokemon.next_evolution && Array.isArray(pokemon.next_evolution)) {
      // 检查next_evolution数组中是否存在name等于目标名称的项
      const hasTargetEvolution = pokemon.next_evolution.some(evolution => {
        return evolution.name === nameOfPokemon;
      });

      if (hasTargetEvolution) {
        matchingPokemons.push(pokemon);
        console.log(`找到进化目标为${nameOfPokemon}的宝可梦:${pokemon.name}`);
      }
    }
  });

  // 返回结果数组,方便后续使用
  return matchingPokemons;
};

这段代码的核心改进点:

  • 用Array.isArray()确保next_evolution是数组,避免报错
  • 用some()方法遍历next_evolution数组,检查是否有对象的name属性等于目标名称
  • 收集所有符合条件的宝可梦到数组中,方便后续处理(而不只是打印)

比如调用infoOfPokemon("Ivysaur", pokedexData),就会找出所有能进化成妙蛙草的宝可梦(也就是妙蛙种子)。

内容的提问来源于stack exchange,提问作者Sm Ashhar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:13:09