javascript数组映射方法中的break语句

Mud*_*Ali 96 javascript

可能重复:
如何短路Array.forEach就像调用break一样?

有没有办法让我在满足条件后突破数组映射方法?我尝试了下面的抛出"Illegal Break Statement" Error.这是我提出的一些随机的例子.

var myArray = [22,34,5,67,99,0];

var hasValueLessThanTen = false;

myArray.map(function (value){
    if(value<10){
      hasValueLessThanTen = true;
      break;
    }
  }
);
Run Code Online (Sandbox Code Playgroud)

我们可以使用for循环,但我想知道我们是否可以完成相同的使用map方法?

Joã*_*lva 138

使用内置功能是不可能的Array.prototype.map.但是,for如果您不打算使用map任何值,则可以使用简单的-loop :

var hasValueLessThanTen = false;
for (var i = 0; i < myArray.length; i++) {
  if (myArray[i] < 10) {
    hasValueLessThanTen = true;
    break;
  }
}
Run Code Online (Sandbox Code Playgroud)

或者,如建议的那样@RobW,用于Array.prototype.some测试是否存在至少一个小于10的元素.当找到与您的函数匹配的元素时,它将停止循环:

var hasValueLessThanTen = myArray.some(function (val) { 
  return val < 10;
});
Run Code Online (Sandbox Code Playgroud)

  • 虽然Rob已经提到过,但我很欣赏这个例子.人们并不总是查看评论,但通常只扫描代码示例! (4认同)
  • 为什么不能使用`Array.prototype.map`? (4认同)
  • @Vadorequest当我是js newbie时,我确实发布了这个问题,`Array.prototype.map`根本不应该以这种方式使用,它是一个帮助方法,用于整个不同的用例,你想要转换每个元素将数组赋予不同的变体.所以,当它涉及"每个元素"时,你永远不需要一个"break"语句,如果你需要一个break语句,这意味着你可能不需要一个map.我发布了这个问题是因为我试图将它用作`iterator`,如果你需要迭代器,那么选择简单的`for`循环或`forEach`和`return` (3认同)
  • 似乎“for”比“some”更快:https://jsperf.com/array-some-vs-loop (2认同)