编写JavaScript函数查找包含指定宝可梦的进化前置宝可梦
完善宝可梦进化溯源函数的解决方案
先帮你梳理下原代码里的几个核心问题,再给出调整后的完整版本,这样就能准确找到所有能进化成指定宝可梦的前代啦:
- 数据集里的
next_evolution是对象数组,每个元素都包含name属性,不是直接存字符串,所以不能用includes直接匹配传入的名称 - 代码里有拼写错误:
allPokemo...少了最后一个n,应该是allPokemon - 部分宝可梦没有后续进化,
next_evolution字段会是undefined,直接访问会报错,得先做存在性判断 - 直接打印结果不够灵活,最好让函数返回结果数组,方便后续二次处理
下面是完善后的完整函数:
var findPreEvolutionPokemons = function(targetName, allPokemon) { // 初始化结果数组,存储所有符合条件的宝可梦 const result = []; // 遍历所有宝可梦,用for...of更安全,避免拿到原型链额外属性 for (const pokemon of allPokemon) { // 先检查当前宝可梦是否有后续进化项,防止报错 if (pokemon.next_evolution) { // 检查后续进化列表里是否包含目标宝可梦,支持大小写不敏感匹配 const matchesTarget = pokemon.next_evolution.some(evolution => { return evolution.name.toLowerCase() === targetName.toLowerCase(); }); if (matchesTarget) { // 按需收集宝可梦信息,这里示例收集编号、名称、属性 result.push({ id: pokemon.id, name: pokemon.name, type: pokemon.type }); } } } // 可选打印结果,同时返回数组供后续使用 console.log(`能进化成${targetName}的宝可梦:`, result); return result; };
关键细节说明:
- 用
some()方法替代手动循环,简洁判断进化列表里是否存在目标名称 - 加入
toLowerCase()实现大小写不敏感匹配,避免因输入大小写错误导致找不到结果 - 返回结构化的结果数组,比单纯打印更实用,方便后续做渲染、筛选等操作
使用示例:
假设你已经获取并解析了数据集为allPokemon数组,调用方式如下:
// 查找所有能进化成Charizard的宝可梦 findPreEvolutionPokemons('Charizard', allPokemon);
内容的提问来源于stack exchange,提问作者Sm Ashhar
相关产品推荐
相关产品推荐

