广告
返回顶部
首页 > 资讯 > 精选 >JavaScript中可以使用forEach跳出循环吗
  • 555
分享到

JavaScript中可以使用forEach跳出循环吗

2023-06-15 11:06:08 555人浏览 独家记忆
摘要

这篇文章给大家介绍javascript中可以使用forEach跳出循环吗,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。forEach使用说明arr.forEach(function callback(curr

这篇文章给大家介绍javascript中可以使用forEach跳出循环吗,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

forEach使用说明

arr.forEach(function callback(currentValue, index, array) {    //your iterator}[, thisArg]);
  • currentValue --- 当前处理的元素

  • index --- 当前处理元素的索引

  • array ---forEach应用的数组

有一段提示写到了在forEach中break和return的用法。原文如下:

There is no way to stop or break a forEach()loop other than by throwing an exception. If you need such behavior, theforEach()method is the wrong tool. Use a plain loop instead. If you are testing the array elements for a predicate and need a Boolean return value, you can useevery() or
some() instead. If available, the new methodsfind() or findIndex() can be used for early termination upon true predicates as well.

意思就是说在forEach中使用break和return是错误的,如果希望使用break或者return请使用every或者some函数。

那么回到标题,首先forEach是不能使用任何手段跳出循环的,为什么呢?我们知道forEach接收一个函数,它一般有两个参数,第一个是循环的当前元素,第二个是该元素对应的下标,我们手动实现一下:

Array.prototype.myForEach = function (fn) {    for (let i = 0; i < this.length; i++) {        fn(this[i], i, this);    }}

forEach是不是真的这么实现我无从考究,但是以上这个简单的伪代码确实满足forEach的特性,而且也很明显就是不能跳出循环,因为你根本没有办法操作到真正的for循环体。

后来经过查阅文档,发现官方对forEach的定义根本不是我认为的语法糖,它的标准说法是forEach为每个数组元素执行一次你所提供的函数。到这里我的思路逐渐明朗,官方文档也有这么一段话:

除抛出异常之外,没有其他方法可以停止或中断循环。如果您需要这种行为,则该forEach()方法是错误的工具

使用抛出异常来跳出foreach循环

let arr = [0, 1, "stop", 3, 4];try {    arr.forEach(element => {        if (element === "stop") {            throw new Error("forEachBreak");        }        console.log(element); // 输出 0 1 后面不输出    });} catch (e) {    console.log(e.message); // forEachBreak};

当然,使用try-catch包裹时,当循环体过大性能会随之下降,这是无法避免的,所以抛出异常并不是解决forEach问题的银弹,我们回归到开头写的那段伪代码,我们对它进行一些优化,在真正的for循环中加入对传入函数的判断:

Array.prototype.forEach = function (fn) {    for (let i = 0; i < this.length; i++) {        let ret = fn(this[i], i, this);        if (typeof ret !== "undefined" && (ret == null || ret == false)) break;    }}

这样的话自然就能根据return值来进行循环跳出啦:

let arr = [0, 1, "stop", 3, 4];arr.forEach(element => {    if (element === 'stop') return false    console.log(element); // 输出 0 1 后面不输出});console.log('return即为continue:');arr.forEach(element => {    if (element === 'stop') return    console.log(element); // 0 1 3 4});

文档中还提到forEach需要一个同步函数,也就是说在使用异步函数或Promise作为回调时会发生预期以外的结果,所以forEach还是需要慎用或者不要使用,当然这并不意味着项目开发中要一直用简单的for循环去完成一切事情,我们可以在遍历数组时使用for..of..,在遍历对象时使用for..in..,而官方也在forEach文档下列举了其它一些工具函数:

Array.prototype.find()Array.prototype.findIndex()Array.prototype.map()Array.prototype.filter()Array.prototype.every()Array.prototype.some()

关于JavaScript中可以使用forEach跳出循环吗就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: JavaScript中可以使用forEach跳出循环吗

本文链接: https://www.lsjlt.com/news/280112.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript中可以使用forEach跳出循环吗
    这篇文章给大家介绍JavaScript中可以使用forEach跳出循环吗,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。forEach使用说明arr.forEach(function callback(curr...
    99+
    2023-06-15
  • python中使用什么语句可以跳出循环体
    python中跳出循环体的方法:在python中可以使用break或continue语句跳出循环体。具体内容如下:break语句可以用来跳出for和while的循环体,如果你从for或while循环中终止,任何对应的循环else块将不执行。...
    99+
    2022-10-11
  • PHP中如何使用foreach()跳出本次或当前循环与终止循环
    这篇文章主要介绍PHP中如何使用foreach()跳出本次或当前循环与终止循环,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!   PHPforeach()跳出本次或当前循环与终止循...
    99+
    2022-10-19
  • C语言中怎么使用break跳出循环
    今天小编给大家分享一下C语言中怎么使用break跳出循环的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。break跳出循环#i...
    99+
    2023-07-04
  • 你知道吗?使用npm可以让你在Python中使用许多流行的JavaScript库!
    在现代软件开发中,前端和后端的分离已经成为了一个趋势。而JavaScript作为前端开发的主流语言,其生态圈中拥有了许多强大的库和框架,例如React、Vue、Angular等等。这些库和框架都能够帮助我们快速地开发出高质量的前端应用程序...
    99+
    2023-08-25
    npm 数据类型 linux
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作