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

实现endangeredSpecies函数及解决‘无法读取undefined的length’报错

解决你的函数错误并完善实现

首先,咱们来拆解你遇到的Cannot read property 'length' of undefined错误:

  • 你调用endangeredSpecies('North America')时只传了一个参数,导致函数里的species参数是undefined,不过更关键的是你没有定义getStatus函数——当代码执行到status = getStatus(div[i].children, species)时,getStatus是未定义的,后续如果尝试在这个不存在的函数里读取某个undefined值的length,就会抛出这个错误。
  • 另外你的函数没有任何return语句,就算逻辑正确,调用后也拿不到结果。

下面是修正并完善后的完整代码:

function endangeredSpecies(continent, species) {
  // 先做参数校验,避免参数缺失导致后续出错
  if (!continent || !species) {
    return ''; // 也可以返回自定义提示,比如'请传入完整的大洲和物种名称'
  }

  // 直接用属性选择器定位对应大洲的ul,不用遍历所有子元素,更高效
  const targetUl = document.querySelector(`ul[data-continent="${continent}"]`);
  
  if (!targetUl) {
    return ''; // 如果找不到对应大洲的列表,返回空
  }

  // 遍历该ul下的所有li元素,查找目标物种
  const liElements = targetUl.querySelectorAll('li');
  for (const li of liElements) {
    if (li.dataset.species === species) {
      return li.textContent; // 找到后直接返回状态,不用继续遍历
    }
  }

  return ''; // 没找到对应物种时返回空
}

// 正确调用示例
console.log(endangeredSpecies('North America', 'American bison')); // 输出 'Near Threatened'
console.log(endangeredSpecies('Europe', 'Cave bear')); // 输出 'Extinct'

关键改进点:

  • 添加参数校验:避免因参数缺失导致的后续逻辑错误
  • 优化元素选择:使用document.querySelector配合属性选择器直接定位目标大洲的列表,省去不必要的循环
  • 内置物种查找逻辑:不再依赖外部的getStatus函数,把查找逻辑整合到主函数里,更简洁直观
  • 及时返回结果:找到目标物种后立即返回,不用遍历所有元素,提升运行效率
  • 处理边界情况:找不到对应大洲或物种时返回空值(你也可以根据需求改成自定义提示信息)

另外,你之前调用函数时少传了物种参数,记得调用时要传入两个必填参数哦!

内容的提问来源于stack exchange,提问作者Vladimir Kirov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:58:52