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

IT技术 javascript
2021-02-09 16:52:13

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

有没有办法在满足我的条件后突破数组映射方法?我尝试了以下抛出"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;
    }
  }
);

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

1个回答

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

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

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

var hasValueLessThanTen = myArray.some(function (val) { 
  return val < 10;
});
为什么不能用Array.prototype.map
2021-03-17 16:52:13
我很欣赏 .some 示例,尽管 Rob 已经提到了它。人们并不总是看评论,但通常至少扫描代码示例!
2021-03-19 16:52:13
@MudassirAli 我希望你能接受这个答案,不是吗?
2021-04-02 16:52:13
看来,for是比速度更快somejsperf.com/array-some-vs-loop
2021-04-04 16:52:13
@Vadorequest 当我还是 js 新手时,我确实发布了这个问题,Array.prototype.map根本不应该这样使用,它是一种用于完全不同用例的辅助方法,您希望将给定数组的每个元素转换为不同的变体。因此,当涉及“每个元素”时,您将永远不需要“break”语句,如果您需要 break 语句,则意味着您可能不需要地图。我发布了这个问题,因为我试图将其用作 a iterator,如果您需要迭代器,则使用简单for循环或forEachreturn
2021-04-05 16:52:13