break 或 continue 循环函数,使用some同forEarch一样,但是直到找到就不继续往下循环,节省内存
停止循环是循环中一个常见的需求。使用for
循环我们可以用break
提前结束循环。
const a = [0, 1, 2, 3, 4];
for (var i = 0; i < a.length; i++) {
if (a[i] === 2) {
break; // stop the loop
}
console.log(a[i]);
}
//> 0, 1
另一个常见的需求使我们需要直接取得变量。
一个快速的方式是使用.forEach
,但是这样我们就失去了break
的能力。这种情况下,最接近的方式是使用return
实现continue
的功能。
[0, 1, 2, 3, 4].forEach(function(val, i) {
if (val === 2) {
// 怎么停止呢?
return true;
}
console.log(val); // your code
});
//> 0, 1, 3, 4
.some
是一个原型方法。他用来检测是否某些元素满足所提供的函数。如果任何元素最终返回true
,它就会停止运行。更多解释请看MDN。
引子上面链接的一个例子:
const isBiggerThan10 = numb => numb > 10;
[2, 5, 8, 1, 4].some(isBiggerThan10); // false
[12, 5, 8, 1, 4].some(isBiggerThan10); // true
使用.some
我们拥有了类似.forEach
的功能,而且使用return
实现了break
的效果。
[0, 1, 2, 3, 4].some(function(val, i) {
if (val === 2) {
return true;
}
console.log(val); // your code
});
//> 0, 1
你可以返回false
使循环continue
到下一个元素。当你返回true
时,循环将会break
,此时a.some(..)
将会return
true
。
// Array contains 2
const isTwoPresent = [0, 1, 2, 3, 4].some(function(val, i) {
if (val === 2) {
return true; // break
}
});
console.log(isTwoPresent);
//> true
还有.every
函数同样可以实现此功能。但此时我们需要返回与.some
相反的布尔值。