用every检查所有子任务是否全部完成,需对子任务对象数组调用every()方法,传入判断完成状态字段(如done、completed)为真的回调函数;若含异步操作,须先用promise.all获取所有状态再执行every。

用 every 检查所有子任务是否全部完成,核心是:把每个子任务的状态(比如 isCompleted: true)作为判断依据,调用数组的 every() 方法,它会返回 true 当且仅当**每个元素都满足条件**。
确认子任务数据结构
通常子任务是对象数组,每个对象包含完成状态字段(常见如 done、completed、isFinished 等):
{ id: 1, name: '需求分析', done: true },
{ id: 2, name: 'UI 设计', done: true },
{ id: 3, name: '接口开发', done: false }
];
用 every 判断是否全部完成
直接对数组调用 every,传入一个返回布尔值的回调函数:
console.log(allDone); // false(因为第三个任务没完成)
如果所有 task.done 都为 true,结果就是 true;只要有一个是 false 或 undefined,结果就是 false。
处理更灵活的完成条件
有时“完成”不单看布尔值,比如可能需要检查字段是否存在、是否为真值、或满足某种逻辑:
- 容错写法(防止
task.done为undefined或null):
subTasks.every(task => Boolean(task.done)) - 检查多个字段(比如必须
done且verified都为真):
subTasks.every(task => task.done && task.verified) - 使用可配置的字段名(适合复用):
const statusKey = 'isCompleted';
subTasks.every(task => task[statusKey] === true)
结合 Promise 处理异步子任务?注意!
every 本身不支持异步。如果你有一组 Promise(比如“每个子任务的完成状态需通过 API 获取”),不能直接写 tasks.map(fetchStatus).every(...) —— 因为得到的是 Promise 数组,不是布尔值。
正确做法是先 await Promise.all(...) 获取所有状态,再用 every:
subTasks.map(task => fetch(`/api/task/${task.id}/status`).then(r => r.json()))
);
const allCompleted = statuses.every(status => status.completed);
不复杂但容易忽略:every 是同步数组方法,只适用于已知状态的数据;异步场景要先聚合结果再判断。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











