在JavaScript的forEach循环中跳到“下一个”迭代

335

如何进入JavaScript Array.forEach() 循环的下一个迭代?

例如:

var myArr = [1, 2, 3, 4];

myArr.forEach(function(elem){
  if (elem === 3) {
    // Go to "next" iteration. Or "continue" to next iteration...
  }

  console.log(elem);
});

MDN文档 只提到完全退出循环,没有提到如何跳到下一次迭代。


4
不要使用SO搜索,改用谷歌。这是在搜索“javascript foreach skip iteration”时的第一个搜索结果。 - Cerbrus
3个回答

618

如果您想跳过当前循环,只需使用return即可。

由于您在函数中,如果在执行任何其他操作之前就return,那么您已经有效地跳过了return语句下面的代码执行。


4
不错的技巧。我也会选择这条路线。无论如何,有些人(尤其是初学者)可能会误解它作为一个停止标准。 - TaoPR
126
实际上,这并不是黑客攻击。这只是它应该运作的方式。 - Cerbrus
1
我一直在尝试让类似于“continue”的东西起作用,但是没有成功。谢谢你提醒我 :)。 - Kaloyan
7
如果有些人在其他答案中没有看到一些解释,那么这个解决方案仅适用于forEach循环,而传统的for循环将不起作用。对于每个元素,For Each循环都会执行回调函数,因此return语句只能继续下一个元素/回调。 - dave4jr
1
当然可以。如果您使用.forEach((arg) => {});语法,可能不太明显。 - sherrellbc

108

JavaScript的forEach方法与其他语言的for each循环略有不同。如果在MDN上阅读,可以看到它说对于数组中的每个元素,都会执行一个函数,并按升序顺序执行。为了继续下一个元素的执行,也就是运行下一个函数,你只需返回当前函数而无需进行任何计算即可。

添加return语句便可进入下一次循环:

var myArr = [1,2,3,4];

myArr.forEach(function(elem){
  if (elem === 3) {
    return;
  }

  console.log(elem);
});

输出: 1、2、4


"return" 在 forEach 中使用效果不佳,但在 for(let itemIndex in array) 中可以正常工作。 - Sunny Sharma
1
@SunnySharma 它正常工作了吗?为什么 returnforEach 不兼容? - Steam gamer

9

在你的if语句内部只需返回true即可。

var myArr = [1,2,3,4];

myArr.forEach(function(elem){
  if (elem === 3) {

      return true;

    // Go to "next" iteration. Or "continue" to next iteration...
  }

  console.log(elem);
});

20
不需要 true。只需 return; - Cerbrus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接