JavaScript 中 forEach 循环如何中断跳出

在 JavaScript 中使用 Array 对象的forEach()函数遍历数组成员时,如果想要中断跳出,不能使用breakreturncontinue否则会报错,因为 JavaScript 规定forEach()方法无法中断执行,总是会将所有成员遍历完。

如果希望符合某种条件时,就中断遍历,要使用for循环。或者使用some()或者every()函数,注意,这两个函数始终需要一个返回值truefalse,否则会报一个警告。

for 循环 break、continue

1. break 中断遍历

break 中断所在的 for 循环。

  1. var arr = [1, 2, 3, 4, 5];
  2. for (var i = 0; i < arr.length; i++) {
  3. if (arr[i] === 3) break;
  4. console.log(`output: ${arr[i]}`);
  5. }
  6. // output: 1
  7. // output: 2

break 中断多重 for 循环。

使用标签,例如下面例子中的outer:inner:,在 break 后面指定跳出哪一层循环体。

  1. var arr1 = ['a', 'b', 'c'];
  2. var arr2 = [1, 2, 3, 4, 5];
  3. outer:
  4. for (var i = 0; i < arr1.length; i++) {
  5. console.log('outer: ', arr1[i]);
  6. inner:
  7. for (var j = 0; j < arr2.length; j++) {
  8. if (arr2[j] === 3) break outer;
  9. console.log('inner: ', arr2[j]);
  10. }
  11. }
  12. // outer: a
  13. // inner: 1
  14. // inner: 2

使用多个 break 中断多重 for 循环。每个 break 只负责中断所在 for 循环体。

  1. var arr1 = ['a', 'b', 'c'];
  2. var arr2 = [1, 2, 3, 4, 5];
  3. for (var i = 0; i < arr1.length; i++) {
  4. console.log('outer: ', arr1[i]);
  5. for (var j = 0; j < arr2.length; j++) {
  6. if (arr2[j] === 3) break;
  7. console.log('inner: ', arr2[j]);
  8. }
  9. break;
  10. }
  11. // outer: a
  12. // inner: 1
  13. // inner: 2

2. continue 跳过循环中的一个迭代

跳过一层 for 循环体。

  1. var arr = [1, 2, 3, 4, 5];
  2. for (var i = 0; i < arr.length; i++) {
  3. if (arr[i] === 3) continue;
  4. console.log(`output: ${arr[i]}`);
  5. }
  6. // output: 1
  7. // output: 2
  8. // output: 4
  9. // output: 5

跳过多重 for 循环体。使用标签,跳过指定 for 循环体。与上面 break 的使用是一样的。

  1. var arr1 = ['a', 'b', 'c'];
  2. var arr2 = [1, 2, 3, 4, 5];
  3. outer:
  4. for (var i = 0; i < arr1.length; i++) {
  5. console.log('outer: ', arr1[i]);
  6. inner:
  7. for (var j = 0; j < arr2.length; j++) {
  8. if (arr2[j] === 3) continue outer;
  9. console.log('inner: ', arr2[j]);
  10. }
  11. }
  12. // outer: a
  13. // inner: 1
  14. // inner: 2
  15. // outer: b
  16. // inner: 1
  17. // inner: 2
  18. // outer: c
  19. // inner: 1
  20. // inner: 2

使用多个 continue 跳过多重 for 循环体。

  1. var arr1 = ['a', 'b', 'c'];
  2. var arr2 = [1, 2, 3, 4, 5];
  3. for (var i = 0; i < arr1.length; i++) {
  4. if(arr1[i] === 'b') continue;
  5. console.log('outer: ', arr1[i]);
  6. for (var j = 0; j < arr2.length; j++) {
  7. if (arr2[j] === 3) continue;
  8. console.log('inner: ', arr2[j]);
  9. }
  10. }
  11. // outer: a
  12. // inner: 1
  13. // inner: 2
  14. // inner: 4
  15. // inner: 5
  16. // outer: c
  17. // inner: 1
  18. // inner: 2
  19. // inner: 4
  20. // inner: 5

使用 some() 或 every() 函数

注意使用这两个函数时,无论是否满足条件,都要返回一个 Boolean(布尔值),否则会报一个警告。

1. 使用 some() 函数中断循环

some方法是只要一个成员的返回值是true,则整个some方法的返回值就是true,否则返回false

  1. var arr = [1, 2, 3, 4, 5];
  2. var bl = arr.some(function (elem, index, arr) {
  3. console.log('output: ', elem);
  4. if(elem >= 3){
  5. return true;
  6. }
  7. return false;
  8. });
  9. console.log(bl);
  10. // output: 1
  11. // output: 2
  12. // output: 3
  13. // true

2. 使用 every() 函数中断循环

every方法是所有成员的返回值都是true,整个every方法才返回true,否则返回false

  1. var arr = [1, 2, 3, 4, 5];
  2. var bl = arr.every(function (elem, index, arr) {
  3. console.log('output: ', elem);
  4. if(elem >= 3){
  5. return false;
  6. }
  7. return true;
  8. });
  9. console.log(bl);
  10. // output: 1
  11. // output: 2
  12. // output: 3
  13. // false

参考文献

http://wangdoc.com/javascript/stdlib/array.html#some%EF%BC%8Cevery

(完)