在for循环中,跳出循环有两种模式: break、continue;但是在forEach中,使用break或者continue都会报错;使用return在forEach不起作用,循环会继续执行,貌似充当了continue的角色。

forEach方法的机制是对数组的每个有效元素执行一次callback函数,然后returnbreak等只作用于一个函数,也就造成了无法跳出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);
            });
    }


 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐