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
(完)