JavaScript forEach 方法跳出循环

for循环

JavaScript中,for循环可以使用 breakcontinue 来跳出:

  • continue:跳出本次循环
  • break:结束循环
js 复制代码
for (let i = 0; i < 10; i++) {
  if (i === 1) {
    // 跳出本次循环,不会打印1
    continue
  }
  if (i === 3) {
    // 结束循环,不会打印3和之后的数字
    break
  }
  // 输出0 2
  console.log(i)
}

forEach循环

除了for循环,常用的forEach如何退出呢?

js 复制代码
const numbers = [1, 2, 3, 4, 5]
numbers.forEach(number => {
  if (number === 2) {
    // 跳出整个循环
    break  // SyntaxError: Illegal break statement
  }
    console.log(number)
})

可以看到,直接使用break,会报非法中断语句错误

再试试 continue

js 复制代码
numbers.forEach(number => {
  if (number === 2) {
    // 跳出当前循环
    continue  // SyntaxError: Illegal continue statement: no surrounding iteration statement
  }
    console.log(number)
})

可以看到同样报错,continue不能在非循环语句中,原因是forEach的参数是一个回调函数,并不是循环语句,所以无法执行continue语句

具体可以参考:SyntaxError: continue must be inside loop - JavaScript | MDN

里面也提到了解决方法,使用 return 退出当前循环,以及使用 for of代替forEach

js 复制代码
numbers.forEach(number => {
  if (number === 2) {
    // 跳出当前循环
    return 
  }
  console.log(number) // 1 3 4 5
}
js 复制代码
for (const number of numbers) {
  if (number === 2) {
    continue
  }
  console.log(number) // 1 3 4 5
}

但是就想使用 forEach 来跳出循环应该如何操作呢,上面文档中没有提到,但可以使用 try catch来实现:

js 复制代码
try {
  numbers.forEach(number => {
    if (number === 2) {
      throw new Error()
    }
    console.log(number) // 1
  })
} catch (error) {
  console.log('捕获到错误')
}

综上,使用forEach时,使用 return 跳出当前循环,使用 try catch 跳出整个循环。

相关推荐
韩曙亮1 个月前
【OpenHarmony】ArkTS 语法基础 ④ ( ArkTS UI 渲染控制 | if else 条件渲染 | ForEach 循环渲染 )
harmonyos·arkts·openharmony·foreach·条件渲染·foreach循环渲染·arkts 渲染控制
ww,pw3 个月前
C# 中,可以使用以下方法优化 List 的 ForEach 循环速度
c#·list·foreach
_小杜小杜_3 个月前
货物摆放例题——(求n的所有因子+foreach循环+set集合应用)
java·蓝桥杯·foreach·hashset
萤火架构5 个月前
遍历用for还是foreach?
foreach·for·编程思想·声明式编程
Jenrey6 个月前
在 Python 中跳出嵌套循环的 5 种方法
python·nested loops·break loops·跳出循环·python跳出循环的方式·python跳出循环
码农阿豪6 个月前
解密 Java ForEach 提前终止问题
java·lambda·foreach
丁总学Java7 个月前
mybatis动态SQL-sql片段
foreach·collection·open·close·include refid·item·separator
珍珠是蚌的眼泪7 个月前
Mybatis
mybatis·foreach·动态标签·resulttype·resultmap
Balmunc9 个月前
[PHP]str_split性能问题
超时··foreach·str_split·for