JavaScript跳过/中止循环的常用方案

如题,日常开发上会经常遇到需要循环判断条件,根据业务情况使用跳过/中止循环。
最简单的循环从For循环开始

var arr = ['ns','ps5','xbox','ps4','will'];
for (var i = 0; i <= arr.length; i++) {
  //跳过当前循环(进入下一次循环)
  if ( i == 1) continue;
  console.log(arr[i]);
  //中止循环(循环结束)
  if ( i == 3) break;
}

然而我们在项目中会使用其他循环的写法(每次都用上面这种循环看着也不优雅),那他们如何实现continue和break呢?

1.jQuery.each()

var arr = ['ns','ps5','xbox','ps4','will'];
$.each(arr, function (i, v) {
  //跳过循环
  if (i == 1) return true;
  console.log(v);
  //中止循环
  if (i == 3) return false;
});

可以看出,执行结果与题目开始的For循环结果是一样的,通过return true/false 实现 continue/break。

2.Array.forEach(),forEach有几个要注意的地方,可以自己通过测试验证。

  • 不支持continue和break的关键字,使用就报错。
  • return/return false/return true,能实现continue的效果,但不能实现break效果。
  • forEach 本身无法跳出循环,必须遍历所有的数据才能结束。

解决方案:
2.1 通过 try catch 抛出异常的方式跳出循环

var arr = ['ns','ps5','xbox','ps4','will'];
try {
  arr.forEach(function (item, index) {
    //跳过当前循环(进入下一次循环)
    if ( index == 1) return;
    console.log(item);
    //满足中止循环条件,抛出异常
    if (index == 3) {
      throw new Error('中止循环')
    }
  })
} catch(e) {
  //todo
}

2.2 使用Es5新增 some() 和 every()函数

  • Array.some()
var arr = ['ns','ps5','xbox','ps4','will'];
var result = arr.some(function (item, index) {
  console.log(item);
  if (index == 3) return true
});
console.log(result) // true

循环只要其中一个条件return true,后续的循环也不会继续执行,从而达到中止循环效果。
整个循环的结果为true,否则为false。

  • Array.every()
var arr = ['ns','ps5','xbox','ps4','will'];
var result = arr.every(function (item, index) {
  console.log(item);
  if (index == 1) return false
  return true
});
console.log(result) // false

循环只有遇到return true,才会执行下一次循环;没有return 或者 return false ,后续的循环不会执行,从而达到中止循环效果。
整个循环的结果为false,否则为true。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。