停止循环是循环中一个常见的需求。使用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相反的布尔值。

示例
JS Bin on jsbin.com