在for循环中,跳出循环有两种模式: break、continue;但是在forEach中,使用break或者continue都会报错;使用return在forEach不起作用,循环会继续执行,貌似充当了continue的角色。
forEach
方法的机制是对数组的每个有效元素执行一次callback
函数,然后return
、break
等只作用于一个函数,也就造成了无法跳出forEach
循环的问题,而是只能跳过当前函数的执行。
forEach跳出循环的方法
- 第一种:使用for代替forEach
只能使用break或者continue;如果是针对函数,则使用return -
xh: //首先将循环命名 for(var i=0;i<10;i++){for(var j=0;j<5;j++){if(i==3 && j==4){break xh; //跳出循环xh}}}
- 第二种:使用try...catch捕获异常实现(不建议使用)
-
function foo(arr ,item){var BreakException= {};try {arr.forEach(function(i) {if(i === item) throw BreakException;console.log(i);});} catch(e) {if (e!==BreakException) throw e;} }
- 第三种:使用some或者every方法
some()中使用eturn true跳出循环,注意:如果在函数中使用,只是跳出循环,而不会终止函数,后面的代码还是会执行
every()中使用return false 跳出循环,但是要在对应的条件中加入return true,才可以执行后续的循环 -
正常的使用环境:如果是测试一个数组里的元素是否符合某条件,且需要返回一个布尔值则应该使用这两个方法。这里可用于跳出循环。
function foo(arr ,item){arr.some(function(i) {if(i === item) return true;console.log(i);}); }
function foo(arr ,item){arr.every(function(i) {if(i === item) return false;console.log(i);}); }