JavaScript 中 forEach 循环如何中断跳出
在 JavaScript 中使用 Array 对象的forEach()函数遍历数组成员时,如果想要中断跳出,不能使用break、return、continue否则会报错,因为 JavaScript 规定forEach()方法无法中断执行,总是会将所有成员遍历完。
如果希望符合某种条件时,就中断遍历,要使用for循环。或者使用some()或者every()函数,注意,这两个函数始终需要一个返回值true或false,否则会报一个警告。
for 循环 break、continue
1. break 中断遍历
break 中断所在的 for 循环。
var arr = [1, 2, 3, 4, 5];for (var i = 0; i < arr.length; i++) {if (arr[i] === 3) break;console.log(`output: ${arr[i]}`);}// output: 1// output: 2
break 中断多重 for 循环。
使用标签,例如下面例子中的outer:和inner:,在 break 后面指定跳出哪一层循环体。
var arr1 = ['a', 'b', 'c'];var arr2 = [1, 2, 3, 4, 5];outer:for (var i = 0; i < arr1.length; i++) {console.log('outer: ', arr1[i]);inner:for (var j = 0; j < arr2.length; j++) {if (arr2[j] === 3) break outer;console.log('inner: ', arr2[j]);}}// outer: a// inner: 1// inner: 2
使用多个 break 中断多重 for 循环。每个 break 只负责中断所在 for 循环体。
var arr1 = ['a', 'b', 'c'];var arr2 = [1, 2, 3, 4, 5];for (var i = 0; i < arr1.length; i++) {console.log('outer: ', arr1[i]);for (var j = 0; j < arr2.length; j++) {if (arr2[j] === 3) break;console.log('inner: ', arr2[j]);}break;}// outer: a// inner: 1// inner: 2
2. continue 跳过循环中的一个迭代
跳过一层 for 循环体。
var arr = [1, 2, 3, 4, 5];for (var i = 0; i < arr.length; i++) {if (arr[i] === 3) continue;console.log(`output: ${arr[i]}`);}// output: 1// output: 2// output: 4// output: 5
跳过多重 for 循环体。使用标签,跳过指定 for 循环体。与上面 break 的使用是一样的。
var arr1 = ['a', 'b', 'c'];var arr2 = [1, 2, 3, 4, 5];outer:for (var i = 0; i < arr1.length; i++) {console.log('outer: ', arr1[i]);inner:for (var j = 0; j < arr2.length; j++) {if (arr2[j] === 3) continue outer;console.log('inner: ', arr2[j]);}}// outer: a// inner: 1// inner: 2// outer: b// inner: 1// inner: 2// outer: c// inner: 1// inner: 2
使用多个 continue 跳过多重 for 循环体。
var arr1 = ['a', 'b', 'c'];var arr2 = [1, 2, 3, 4, 5];for (var i = 0; i < arr1.length; i++) {if(arr1[i] === 'b') continue;console.log('outer: ', arr1[i]);for (var j = 0; j < arr2.length; j++) {if (arr2[j] === 3) continue;console.log('inner: ', arr2[j]);}}// outer: a// inner: 1// inner: 2// inner: 4// inner: 5// outer: c// inner: 1// inner: 2// inner: 4// inner: 5
使用 some() 或 every() 函数
注意使用这两个函数时,无论是否满足条件,都要返回一个 Boolean(布尔值),否则会报一个警告。
1. 使用 some() 函数中断循环
some方法是只要一个成员的返回值是true,则整个some方法的返回值就是true,否则返回false。
var arr = [1, 2, 3, 4, 5];var bl = arr.some(function (elem, index, arr) {console.log('output: ', elem);if(elem >= 3){return true;}return false;});console.log(bl);// output: 1// output: 2// output: 3// true
2. 使用 every() 函数中断循环
every方法是所有成员的返回值都是true,整个every方法才返回true,否则返回false。
var arr = [1, 2, 3, 4, 5];var bl = arr.every(function (elem, index, arr) {console.log('output: ', elem);if(elem >= 3){return false;}return true;});console.log(bl);// output: 1// output: 2// output: 3// false
参考文献
http://wangdoc.com/javascript/stdlib/array.html#some%EF%BC%8Cevery
(完)