forEach 循环中断
forEach 中 return 无效,如何正确中断循环
问题
在 forEach 循环中使用 return 无法中断循环,函数会继续执行。如何中断 forEach 循环?
解答
forEach 中 return 无效
forEach 中的 return 只是结束当前回调函数,不会中断整个循环:
const arr = [1, 2, 3, 4, 5];
arr.forEach(item => {
if (item === 3) {
return; // 只是跳过当前项,循环继续
}
console.log(item);
});
// 输出: 1, 2, 4, 5
方法一:抛出异常
使用 try-catch 配合异常来中断:
const arr = [1, 2, 3, 4, 5];
try {
arr.forEach(item => {
if (item === 3) {
throw new Error('中断循环');
}
console.log(item);
});
} catch (e) {
console.log('循环已中断');
}
// 输出: 1, 2, 循环已中断
方法二:使用 every(推荐)
every 遇到 return false 时中断:
const arr = [1, 2, 3, 4, 5];
arr.every(item => {
if (item === 3) {
return false; // 中断循环
}
console.log(item);
return true; // 继续循环
});
// 输出: 1, 2
方法三:使用 some(推荐)
some 遇到 return true 时中断:
const arr = [1, 2, 3, 4, 5];
arr.some(item => {
if (item === 3) {
return true; // 中断循环
}
console.log(item);
return false; // 继续循环
});
// 输出: 1, 2
关键点
forEach中的return只能跳过当前项,无法中断整个循环- 抛出异常可以中断,但不推荐,代码不够优雅
every返回false时中断,适合需要全部满足条件的场景some返回true时中断,适合只需满足一个条件的场景- 如果需要中断循环,优先使用
for、for...of或every/some
目录