精华内容
下载资源
问答
  • 本篇文章给大家带来的内容是关于如何中断forEach循环(详细介绍),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。在使用for循环的时候可以使用break 或者return语句来结束for循环(return直接结束...

    本篇文章给大家带来的内容是关于如何中断forEach循环(详细介绍),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

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

    尝试使用break 和return

    首先尝试一使用return语句----木有效果[1,2,3,4,5].forEach(item=>{

    if(item===2){

    return

    }

    console.log(item);

    })

    MDN给出的官方解释

    为什么会出现这样的情况?先看一下官方文档的说明。

    MDN文档上明确说明forEach循环是不可以退出的。引自MDN

    There is no way to stop or break a forEach() loop other than by throwing an exception. If you need such behavior, the forEach() method is the wrong tool.

    注意: 没有办法中止或者跳出 forEach() 循环,除了抛出一个异常。如果你需要这样,使用 forEach() 方法是错误的。

    若你需要提前终止循环,你可以使用:

    简单循环

    for...of 循环

    Array.prototype.every()

    Array.prototype.some()

    Array.prototype.find()

    Array.prototype.findIndex()

    探究为什么break和return不行

    先看看为什么return没有效果,break报错,forEach的实现方式用代码表示出来可以写成如下的结构const arr = [1, 2, 3, 4, 5];

    for (let i = 0; i < arr.length; i++) {

    const rs = (function(item) {

    console.log(item);

    if (item > 2) return false;

    })(arr[i])

    }

    使用return语句相当于在每个自执行函数中将返回值复制给rs,但是实际对整个函数并没有影响。而使用break语句报错是因为再JS的解释器中break语句是不可以出现在函数体内的。

    如何变通跳出forEach循环

    MDN官方推荐的方法// every在碰到return false的时候,中止循环。some在碰到return ture的时候,中止循环。

    var a = [1, 2, 3, 4, 5]

    a.every(item=>{

    console.log(item); //输出:1,2

    if (item === 2) {

    return false

    } else {

    return true

    }

    })

    var a = [1, 2, 3, 4, 5]

    a.some(item=> {

    console.log(item); //输出:1,2

    if (item === 2) {

    return true

    } else {

    return false

    }

    })

    其他方法

    1.使用for循环或者for in 循环代替

    2.使用throw抛出异常try {

    [1, 2, 3, 4, 5].forEach(function(item) {

    if (item=== 2) throw item;

    console.log(item);

    });

    } catch (e) {}

    3.使用判断跑空循环var tag;

    [1, 2, 3, 4, 5].forEach(function(item){

    if(!tag){

    console.log(item);

    if(item===2){

    tag=true;

    }

    }

    这样做有两个问题,第一个问题,全局增加了一个tag变量,第二个问题,表面上看是终止了forEach循环,但是实际上循环的次数并没有改变,只是在不满足条件的时候callback什么都没执行而已,先来解决第一个问题,如何删除全局下新增的tag变量 。实际上forEach还有第二个参数,表示callback的执行上下文,也就是在callback里面this对应的值。因此我们可以讲上下文设置成空对象,这个对象自然没有tag属性,因此访问this.tag的时候会得到undefined[1, 2, 3, 4, 5].forEach(function(item){

    if(!this.tag){

    console.log(item);

    if(item===2){

    this.tag=true;

    }

    }

    },{})

    4.修改索引var array=[1, 2, 3, 4, 5]

    array.forEach(item=>{

    if (item == 2) {

    array = array.splice(0);

    }

    console.log(item);

    })

    讲解:

    forEach的执行细节

    1.遍历的范围在第一次执行callback的时候就已经确定,所以在执行过程中去push内容,并不会影响遍历的次数,这和for循环有很大区别,下面的两个案例一个会造成死循环一个不会var arr=[1,2,3,4,5]

    //会造成死循环的代码

    for(var i=0;i

    arr.push('a')

    }

    //不会造成死循环

    arr.forEach(item=>arr.push('a'))

    2.如果已经存在的值被改变,则传递给 callback 的值是 forEach 遍历到他们那一刻的值。var arr=[1,2,3,4,5];

    arr.forEach((item,index)=>{

    console.log(`time ${index}`)

    arr[index+1]=`${index}a`;

    console.log(item)

    })

    3.已删除的项不会被遍历到。如果已访问的元素在迭代时被删除了(例如使用 shift()),之后的元素将被跳过。var arr=[1,2,3,4,5];

    arr.forEach((item,index)=>{

    console.log(item)

    if(item===2){

    arr.length=index;

    }

    })

    在满足条件的时候将后面的值截掉,下次循环的时候照不到对应的值,循环就结束了,但是这样操作会破坏原始的数据,因此我们可以使用一个小技巧,即将数组从0开始截断,然后重新赋值给数组也就是array=array.splice(0)。

    本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的JavaScript教程视频栏目!

    展开全文
  • 背景:由于需要接收一组推送数据插入到我方数据库,不做事务,1 2 3 4 返回 1true 2true 3false 4true ,意思就是不中断for循环,首先我是菜鸟,第一时间想到的是在catch里面加continue(同事叫我抓紧时间写辞职报告) ...

    背景:由于需要接收一组推送数据插入到我方数据库,不做事务,1 2 3 4 返回 1true 2true 3false 4true ,意思就是不中断for循环,首先我是菜鸟,第一时间想到的是在catch里面加continue(同事叫我抓紧时间写辞职报告)
    解决:catch简单手动处理后,是不会中断for循环的
    总结:视业务情况而定,回家养猪吧!!
    情况1:在这里插入图片描述

    情况2:在这里插入图片描述
    最终采用:
    撒旦地方撒(https://img-blog.csdnimg.cn/20210121113228941.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzE5MzMyMw==,size_16,color_FFFFFF,t_70)
    执行结果:
    在这里插入图片描述

    展开全文
  • 该突破是使用后一定次数或满足了特定标准和转让程序执行,只是循环体之后写入下一个语句的控制...范例1:在这里,我们有一个名称数组,并在找到指定的字符串时中断循环执行。1)PHP代码演示在foreach循环中中断的示例...

    该突破是使用后一定次数或满足了特定标准和转让程序执行,只是循环体之后写入下一个语句的控制后停止进程的执行的关键字。

    在本文中,我们将学习如何打破foreach循环?为了打破foreach循环方式,我们将停止数组的循环没有它不一定循环到最后一个元素,因为我们得到了什么是需要的时刻。

    范例1:

    在这里,我们有一个名称数组,并在找到指定的字符串时中断循环执行。

    1)PHP代码演示在foreach循环中中断的示例<?php

    //数组定义

    $names = array("joe", "liz", "dan", "kelly", "joy", "max");

    // foreach循环

    foreach ($names as $name) {

    //显示循环

    echo $name . '
    ';

    //当名称等于dan时停止

    if ($name == 'dan') break;

    }

    ?>

    输出结果joe

    liz

    dan

    范例2:

    让我们看看如何通过包含名称和年龄的关联数组来使用break foreach,以显示该数组2个成员的名称和年龄?

    2)PHP代码在带有关联数组的foreach循环中使用break<?php

    //数组定义

    $members = array("joe" => "12", "liz" => "13", "sam" => "14", "ben" => "15");

    //要计数的变量

    $count = 0;

    //显示或循环显示的数字

    $end = 2;

    foreach ($members as $key => $value) {

    $count++; //增加计数器

    //显示

    printf("%s is  %d years old
    ", $key, $value);

    //当$count等于$end时停止

    if ($count == $end) break;

    }

    ?>

    输出结果joe is 12 years old

    liz is 13 years old

    在此示例中,我们定义了$count变量以计算循环数并与$end变量进行比较。$end变量可以是任何数字,这完全取决于我们需要的迭代次数。

    展开全文
  • Python中断循环

    2021-09-14 17:25:13
    中断循环的几种方式: 1.红色方框 2.ctrl+f2 选择性中断

    中断死循环的几种方式:

    1.红色方框

    2.ctrl+f2 选择性中断

     

    展开全文
  • 如何中断forEach循环

    千次阅读 2020-12-30 10:15:56
    一般我们使用forEach之类的语法,进行数组遍历,并且在遍历时进行到某一步的时候进行业务代码编写,这个就意味着需要打断循环 例如: let arr = [1, 2, 3] arr.forEach((item, index)=>{ if (item == 2) { /...
  • 循环中断break和continue

    2021-09-18 18:50:35
    break continue ◆break在任何循环语句的主体...而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,它们就会中断到存在标签的地方。
  • Shell循环语句for循环语句例题1:批量添加用户例题2:根据IP地址检查主机状态while循环语句例题1 猜价格游戏例题二:批量添加用户until循环语句例题:计算1~50的值中断(break和continue)①break②continueIFS字段...
  • 我一直在尝试在Python上做一个对数计算器。我离完成它只有一步之遥。代码如下:import math print("Welcome to ...但是当用户回答“n”时,它不会破坏程序,因为它让我们进入外循环。 那么如何解决这个问题呢?在
  • 我有以下代码 import serial import time ser = serial.Serial('COM10', 9600, timeout=0) timeout = time.time() + 60*1 def readresponse(): while 1: try: print(ser.readline()) time.sleep(1) ... 你知道为什么吗?
  • 我有一个正在读取用户输入的while循环。但是我希望用户能够在任何时候打破while循环,这样他们就可以返回主菜单。在目前,这是我唯一能做到的方法(如果用户在每一点后都输入了“--back”语句)。这个菜单代码从返回...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼C51_C语言编程控制流水灯硬件电路 p0 接 led 8 个,P33 接按键使用中断2开机灯按1~8逐位闪烁,并循环按键后改 两灯亮 的流水灯下面写了个程序#include #include #...
  • 当想要在循环中判断某个值 空或者怎么样时,不要使用forEach,使用 1. for...of / for...in loops 2. Array.prototype.every() 3. Array.prototype.some() 4. Array.prototype.find() 5. Array.prototype.find...
  • python循环定时中断执行某一段程序的实例问题说明最近在写爬虫,由于单个账号访问频率太高被封,所以需要在爬虫执行一段时间间隔后自己循环切换账号所以就在想,有没有像单片机那样子设置一个定时中断,再定义一个...
  • es6 forEach/map循环中断

    2021-05-24 15:30:10
    //目的:数据匹配到了就中断循环 //结果:所有循环都执行了 let data = [1,2,3,4,5,6] data.forEach((val,index,arr)=>{ console.log(`当前第${index+1}循环执行了`) if(val>3){ //模仿
  • 最近在调步进电机SPTA加减速的时候,遇上了困扰了我一个星期的问题。 问题如下: ...这就奇怪了,我不是已经去除中断标志位了吗,啥非要去除两次,三次呢?由此得出推测:应该是中断服务函数里指令过长导
  • 我有一个JOptionPane要求一个数字,如果该数字小于10,则一个循环会一直持续下去,并永远做下去,继续询问数字。 在该循环内,我调用一个方法,将int作为参数。 在该方法中,我需要(不更改调用该方法的类中的任何...
  • 我有一个Java 8流循环,其内容如下:void matchSellOrder(Market market, Order sellOrder) {System.out.println("selling " + market.pair() + " : " + sellOrder);market.buyOrders().stream().filter(buyOrder -&...
  • stm32f407中断循环

    2021-09-03 07:35:44
    STM32f407的USART3中断循环,形成死机。 我用的是 STM32F407芯片 USART3_IRQHandler 总是中断,程序死循环。 1、出现问题: 原程序的中断处理程序是: void USART2_IRQHandler(void) { u8 key = 0; USART_...
  • 跳出单循环不管是什么编程语言,都有可能有跳出循环的需求,比如枚举时,找到一个满足条件的数就终止。跳出单循环是很简单的,比如for i in range(10):if i > 5:print ibreak然而,我们有时候需要跳出多重.....
  • php循环处理中,中间有个方法执行错误有时会中断循环,我们可以使用php的异常处理配合日志来解决: foreach ($full_list as $key => $fullData) { try { // 更新单品信息缓存 try { self::setProductCache($...
  • G'day, I have a list of individuals that are grouped by place. I want to produce a new variable that gives a number to each individual dependant on their place. What I would like my data to look like ...
  • JavaScript数组对象,有一个forEach方法,可枚举每一个数组元素,但并不支持类似for循环的break语法,中断循环:[1,2,3].forEach(function(item) {// if(!item) break; 不支持});解决办法,可抛出一个特殊异常,来...
  • 给i赋值1到5,for循环i3的时候中断所有循环,4和5不执行,结束输出aaaa 2.continue 给i赋值1到5,if语句i3的时候退出本次循环,本次不执行后面操作,继续下一循环 3.exit语句,i=3时退出整个循环 ...
  • demo: try { arr.forEach((item, index) => { if (index === 1) throw new Error; } } catch {} 利用try catch 语句 中断退出
  • 最简单的解决方案可能是创建一个函数,该函数将显示的消息作为输入,并在测试是否满足您的条件后返回用户输入:def guess_input(input_message):flag = False#endless loop until we are satisfied with the ...
  • 需要在初始化时加入HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); 并且将中断的优先级设置高于0。
  • Stream.forEach 不是一个循环,它不是使用 break 这样的东西终止而设计的。 如果流是并行流,则 lambda 代码可以同时在不同的线程上执行(不容易去中断,并且它可能很容易产生不正确的结果)。最好使用带有 while ...
  • 今天应了一个网友的要求帮他做一个自动嗑药的按键脚本,...查阅了官方文档后,官方给出了一个解决方法,长时间操作添加一个线程,但是依然不行。。。官方解释:from pynput.keyboard import Key, Controllerfrom p...
  • 如何中断事件循环

    2021-06-11 20:38:41
    Qt::WA_TransparentForMouseEvents 开启接受鼠标事件 setAttribute( Qt::WA_TransparentForMouseEvents,true) 用到这是因为无法中断QT的事件循环,但是后面使用了这个属性发现还是无法中断事件循环,所以猜想QT对于...
  • 我正在使用apache.commons jar从文件夹中读取最新的10个文件(按创建日期)这是列出所有的文件,但我不知道为什么即使在完成读取10个文件后,它仍然没有停止这是我的代码,但我不知道它为什么不停止import org.apache....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 259,905
精华内容 103,962
关键字:

为什么中断会循环