JavaScript forEach 方法跳出循环

本文讨论了JavaScript中for循环和forEach的跳出机制,指出break和continue在forEach中的限制,并介绍了使用return、trycatch以及数组操作(splice)来实现跳出的不同方法。
摘要由CSDN通过智能技术生成

背景

这个问题平时工作中基本不会遇到,通常是面试时,有的面试官喜欢问这个,所以有了探讨的意义。
首先我们来看看 for 循环是怎么处理跳出的。

for循环

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

  • continue:跳出本次循环
  • break:结束循环
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 如何跳出呢?

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

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

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

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

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

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

另辟蹊径
除了上面的用法,前几天刷博客看评论的时候,看见一个方法,大家也可以尝试一下。

var list = [1, 2, 3, 4, 5]
list.forEach((v, index) => {
if (v == 3) {
  list = list.splice(0, index)
}

console.log(index)
})

在想要跳出循环的时候,将原数组的数量减少,这样就直接跳出了数组,可以说是非常巧妙了😂,大家也可以试试。

综上,使用 forEach 时,使用 return 跳出当前循环,使用 try catch 跳出整个循环,同时也可以试试上面的另类方法。

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
JavaScript中,forEach方法本身是没有提供跳出循环的机制的。然而,有一种常用的方法是通过使用try...catch语句来抛出异常的方式来跳出forEach循环。具体是在forEach的回调函数中,当满足某个条件时,使用throw语句抛出一个自定义的异常,然后在try...catch语句中捕获这个异常来跳出循环。例如,可以像以下代码示例中这样实现: ``` let arr = [1,2,3,4,5,6,7,8,9]; let num = 6; try { arr.forEach((item, i) => { console.log('item',item) if (item === num) { throw new Error('LoopInterrupt'); //满足条件,抛出异常跳出循环 } }) } catch (e) { if (e.message !== "LoopInterrupt") throw e; //捕获异常,如果不是指定的异常,则继续抛出 } console.log(123); ``` 在上面的代码中,当item等于num时,通过使用throw语句抛出一个名为"LoopInterrupt"的异常,然后在try...catch语句中捕获这个异常并跳出循环。注意,为了避免捕获到其他异常,需要在catch语句中添加条件判断。 需要注意的是,这种方法虽然可以实现跳出forEach循环的效果,但并不是官方推荐的做法。在forEach方法中使用异常机制来跳出循环可能会导致代码的可读性和可维护性下降,建议在实际开发中根据具体情况选择其他循环方法或编写自定义的循环逻辑来达到跳出循环的目的。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [JavaScript foreach 方法跳出循环](https://blog.csdn.net/HH18700418030/article/details/121165171)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [【jsforEach跳出循环](https://blog.csdn.net/weixin_43918803/article/details/126975013)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [JS forEach跳出循环2种实现方法](https://download.csdn.net/download/weixin_38612648/13128181)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

easylee1996

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值