JavaScript函数checkIfHealthyColony逻辑错误排查求助
修正checkIfHealthyColony函数的逻辑错误
你的代码逻辑完全不符合需求,导致测试用例失败,核心问题如下:
- 错误将
ant.type === 'worker'作为健康判断依据,需求中根本不关心worker蚁的存在,只需要判断是否有僵尸蚁 - 遍历过程中只要碰到worker蚁或有解毒剂就直接返回true,这会导致存在僵尸蚁但无解毒剂的场景下,因为蚁群里有worker蚁,函数会提前返回true,完全忽略了僵尸蚁的存在
正确实现代码(两种写法)
写法1:使用数组some方法(简洁高效)
function checkIfHealthyColony(colony, hasAntidote) { // 有解毒剂时直接判定健康 if (hasAntidote) { return true; } // 检查蚁群中是否存在僵尸蚁 const hasZombie = colony.some(ant => ant.type === 'zombie'); // 没有僵尸蚁则健康,否则不健康 return !hasZombie; }
写法2:使用for循环(适合基础学习阶段理解)
function checkIfHealthyColony(colony, hasAntidote) { if (hasAntidote) { return true; } // 遍历整个蚁群查找僵尸蚁 for (const ant of colony) { if (ant.type === 'zombie') { // 找到僵尸蚁,直接返回不健康 return false; } } // 遍历结束未发现僵尸蚁,返回健康 return true; }
逻辑说明
- 优先判断
hasAntidote:只要有解毒剂,不管蚁群状态如何,直接返回true,符合需求 - 无解毒剂时,遍历蚁群检查是否存在僵尸蚁:
- 一旦找到僵尸蚁,立即返回false(存在僵尸且无解毒剂,不符合健康条件)
- 遍历完所有蚂蚁都没找到僵尸蚁,返回true(无僵尸蚁,符合健康条件)
用你提供的exampleColony测试:
- 当
hasAntidote = false时,函数会找到type为zombie的adam,返回false,符合测试要求 - 当
hasAntidote = true时,直接返回true - 无僵尸蚁的蚁群会返回true,三个测试用例全部通过
内容的提问来源于stack exchange,提问作者Muhammad Yaseen
相关产品推荐
相关产品推荐

