forEach如何终止循环?

更新日期: 2023-10-20阅读: 1.2k标签: 循环

我们都知道在for循环中,退出循环有3种方式:return(终止)、break(退出整个循环)、continue(退出当次循环)。

但是如果使用forEach方法,但很容易遇到一个问题就是,当你想要跳出这个循环时,上面的方式好像不起作用了,除了return(且return在forEach()中相当于continue)。


foreach能不能跳出循环

举个例子

let list = [0,1,2,3,4,5,6,7,8,9];
list.forEach(function(item){
console.log(item);
if (item > 5 ){
return;
}
});

输出结果是0,1,2,3,4,5,6,7,8,9。并没有在大于5的时候终止循环。

如果把return替换为break会报错:Uncaught SyntaxError: Illegal break statement。这是为什么呢,在V8的源码里找了又找也没有找到forEach函数的源码,从其他实现的forEach中也能发现一些端倪。

Array.prototype.myEach = function(callback) {
for (var i = 0; i < this.length; i++)
callback(this[i], i, this);
};

在回调函数中使用return,只是将结果返回到上级函数,也就是这个for循环中,并没有结束for循环,所以return也是无效的。

所以如果有面试官或者有人问你foreach怎么跳出循环,请你大声的告诉ta,跳不出!


foreach终止循环

在forEach的设计中并没有中断循环的设计,但是可以通过try{}catch(){}结合throw抛错的方式终止循环:

try {
[1,2,3,4,5].forEach((item) => {
if (item > 5) throw new Error('退出forEach循环!')
console.log(item)
})
} catch(e) {
console.log(e)
}

但在实际开发中,不推荐这样使用。这是由于try-catch包裹时,当循环体过大性能会随之下降,这是无法避免的,所以抛出异常只是作为一种中断forEach的手段而已。

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


链接: https://fly63.com/article/detial/12536

跳出 forEach

使用for...in遍历对象时,会遍历原型链上的可枚举属性,这可能会导致一些意想不到的问题。所以你一定收到过这样的建议,使用数组的forEach来代替for...in循环。本文给大家总结了5种在forEach中跳出循环的变通之法

JavaScript循环下的async/await

在进行业务开发的过程中,使用了数组的高级函数map,同时使用了ES6语法async/await,发现在map循环下任务是异步执行的,并不符合预期。Array的循环方法map、forEach、filter、reduce、some、every等是并行迭代,可以理解为async/await的效果是无效的

如何中断forEach循环

在使用for循环的时候可以使用break 或者return语句来结束for循环(return直接结束函数),但是如果使用forEach循环如何跳出循环呢?首先尝试一使用return语句----木有效果

用于JavaScript中的循环和同时循环

如果您需要重复大量的代码数百次,这会变得非常笨拙。而且,它也不是很有用。例如,如果希望它重复X次呢?这就是循环的用武之地。次数通常由变量决定,但也可以由实际数字决定。

Js中循环执行

循环:就是一遍又一遍执行相同或者相似的代码,循环的两个要素:循环体:重复执行的代码;循环条件:控制循环的次数

为啥要放弃for循环?

创建一个新的数组,新的数组中的元素是通过检查指定数组中符合条件的元素;注意:1. filter()不会对空数组进行检测;2. filter()不会改变源是数组;

解决使用Vue-Router出现无限循环问题

我在项目里面用到了的是全局守卫,beforeEach,方便管理 不过遇到了一个问题,就是在beforeEach()中设置好判断条件后出现了无限循环的问题 当时的代码如下:

Node.js事件循环

对于本文中一些知识点任然有些模糊,懵懵懂懂,一直都在学习中,通过学习事件循环也看了一些文献,在其中看到了这一句话:除了你的代码,一切都是同步的,我觉得很有道理,对于理解事件循环很有帮助。

关于for循环中使用setTimeout的四种解决方案

我们先来简单了解一下setTimeout延时器的运行机制。setTimeout会先将回调函数放到等待队列中,等待区域内其他主程序执行完毕后,按时间顺序先进先出执行回调函数。本质上是作用域的问题

Js循环的几种方法

for 常用于循环数组 ,for in 常用来循环对象,不建议循环数组,因为i是字符串 可能会有隐患问题,for in 循环会找到 prototype 上去,所以最好在循环体内加一个判断

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!