
本文详解如何编写 checkIfHealthyColony 函数,使其准确返回蚁群健康状态:当无僵尸蚁或拥有解药时返回 true,否则返回 false,并对比传统循环与数组高阶函数 some() 的优劣实现。
本文详解如何编写 `checkifhealthycolony` 函数,使其准确返回蚁群健康状态:当无僵尸蚁或拥有解药时返回 `true`,否则返回 `false`,并对比传统循环与数组高阶函数 `some()` 的优劣实现。
在 JavaScript 函数学习中,逻辑条件的组织顺序和遍历意图常是初学者易错的关键点。题中要求:只要存在一只 type === 'zombie' 的蚂蚁且 hasAntidote === false,就应判定蚁群不健康(返回 false);其余所有情况均视为健康(返回 true)。
你最初的代码存在两个核心逻辑错误:
- ❌ 错误地用 ant.type === 'worker' 作为健康依据——这忽略了 queen、drone 等合法类型,更未检测 zombie;
- ❌ 在循环内过早 return true,导致仅检查第一个蚂蚁就终止执行,完全跳过了后续可能存在的僵尸蚁。
✅ 正确思路应分两步判断:
- 优先检查解药:若 hasAntidote 为 true,无论是否有僵尸,蚁群均可被“治愈”,直接返回 true;
- 再检查僵尸:若无解药,则遍历整个蚁群,一旦发现任意 ant.type === 'zombie',立即返回 false;若遍历完成未发现僵尸,说明全员健康,返回 true。
✅ 方案一:传统 for...of 循环(清晰易读,适合初学者)
function checkIfHealthyColony(colony, hasAntidote) {
// 第一步:有解药 → 直接健康
if (hasAntidote) {
return true;
}
// 第二步:无解药 → 检查是否存在僵尸
for (const ant of colony) {
if (ant.type === 'zombie') {
return false; // 发现僵尸且无解药 → 不健康
}
}
// 遍历结束未发现僵尸 → 健康
return true;
}✅ 方案二:函数式写法(简洁高效,推荐进阶使用)
利用数组内置方法 some() —— 它返回 true 当且仅当至少一个元素满足条件。我们只需判断:“是否存在僵尸蚁?”,再取反,并结合解药条件:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
function checkIfHealthyColony(colony, hasAntidote) {
return hasAntidote || !colony.some(ant => ant.type === 'zombie');
}该表达式逻辑等价于:
“有解药” 或 “不存在任何僵尸蚁” → 蚁群健康(true)
? 测试验证(使用题目提供的示例)
const exampleColony = [
{ name: "anthony", type: "worker" },
{ name: "dec", type: "worker" },
{ name: "marie-antoinette", type: "queen" },
{ name: "adam", type: "zombie" }
];
const exampleColony2 = [
{ name: "anthony", type: "worker" },
{ name: "dec", type: "worker" },
{ name: "marie-antoinette", type: "queen" },
{ name: "adam", type: "drone" }
];
console.log(checkIfHealthyColony(exampleColony, false)); // false(有僵尸,无解药)
console.log(checkIfHealthyColony(exampleColony, true)); // true(有解药,可治愈)
console.log(checkIfHealthyColony(exampleColony2, false)); // true(无僵尸)⚠️ 注意事项总结
- some() 是纯函数,不修改原数组,安全可靠;
- 避免在循环中基于非目标条件(如 type === 'worker')提前返回,应聚焦于失败条件(即 zombie);
- 布尔逻辑优先级:|| 会短路执行,hasAntidote 为 true 时,右侧表达式不会运行,性能更优;
- 实际开发中,推荐方案二——它更声明式、更少出错、更贴近现代 JavaScript 实践。
掌握这种“先兜底、再筛查”的函数设计思维,将为你后续处理过滤、校验、权限判断等场景打下坚实基础。

















