Array.prototype.forEach方法无法像for循环那样进行循环后在某处符合条件便跳出循环,但我们可以通过抛出一个异常来实现跳出循环
const forArr = [1, 2, 3, 4, 5, 6];
let forEachError = () => {
forArr.forEach((v) => {
if (v > 3) {
throw new Error("value greater than three"); // 我们通过抛出一个异常实现循环的终止
}
console.log(v);
});
};
forEachError();
输出结果为:
但是生产环境并不建议使用这种方式进行循环的跳出,因为抛出错误后,后续的逻辑代码便不会执行,可见如下示例
const forArr = [1, 2, 3, 4, 5, 6];
let consoleArr = [];
let forEachError = () => {
forArr.forEach((v) => {
if (v > 3) {
throw new Error("value greater than three"); // 我们通过抛出一个异常实现循环的终止
}
consoleArr.push(v);
console.log(v);
});
console.log(consoleArr, "consoleArr"); // 这行逻辑是不会被执行的
};
forEachError();
输出结果如下:
我们看见,console.log(consoleArr,'consoleArr')这行代码并没有被执行,抛出错误后代码产生了截断,那我们应该使用什么方法来跳转出循环呢?
方法一:for...in或for...of
const forArr = [1, 2, 3, 4, 5, 6];
let consoleArr = [];
let forEachError = () => {
for (let v of forArr) {
if (v > 3) {
break;
}
consoleArr.push(v);
console.log(v);
}
console.log(consoleArr, "consoleArr");
};
forEachError();
输出结果为
方法二:Array.prototype.some或Array.prototype.every
const forArr = [1, 2, 3, 4, 5, 6];
let consoleArr = [];
let forEachError = () => {
forArr.every((v) => {
consoleArr.push(v);
console.log(v);
return v < 3; // 此处应当小于3,而非小于等于3,否则循环会多执行一次,多push一个值为4
});
console.log(consoleArr, "consoleArr");
};
forEachError();
输出结果为: