你可以终止 forEach 吗?

news2024/9/20 18:41:20

🧑‍💻 写在开头
点赞 + 收藏 === 学会🤣🤣🤣

理解 forEach

JavaScript 的forEach方法是一种流行的数组迭代工具。它为每个数组元素执行一次提供的函数。但是,与传统的for 和 while循环不同,forEach它被设计为对每个元素执行该函数,没有内置机制来提前停止或中断循环。


 const fruits = ["apple", "banana", "cherry"];
 fruits.forEach(function (fruit) {
    console.log(fruit); //apple banana cherry
 });
 

传统的方式无法终止 forEach

01:利用 break

forEach 的一个关键限制是无法使用传统的控制语句(如break或return)来停止或中断循环。 如果你尝试在 forEach 中使用break,您将遇到语法错误,因为break在回调函数中不适用。


const numbers = [1, 2, 3, 4, 5];  
numbers.forEach(number => {  
  if (number > 3) {  
    break; //Syntax Error: Illegal break statement  
  }  
  console.log(number);  
});


02:利用 return

在其他循环或函数中,return 语句退出循环或函数,并返回一个值(如果指定)。

在 forEach 的上下文中,return 不会跳出循环。 相反,它只是退出回调函数的当前迭代并移至数组中的下一个元素。


const numbers = [1, 2, 3, 4, 5];  
numbers.forEach(number => {  
  if (number === 3) {  
    return; //Exits only the current iteration  
  }  
  console.log(number); //1、2、4、5  
});


return 跳过 3 的打印,但循环继续处理剩余元素。

使用 Error 终止 forEach

虽然不建议这么使用,但从技术上讲,可以通过抛出异常来停止 forEach 循环。 这种方法虽然是非正统的,并且由于影响代码可读性和错误处理而通常建议不要这样做,但它可以有效地停止循环。


const numbers = [1, 2, 3, 4, 5];  
try {  
  numbers.forEach(number => {  
    if (number > 3) {  
      throw new Error('循环停止');  
    }  
    console.log(number);  
  });  
} catch (e) {  
  console.log('出现异常,循环已停止');  
}  
// 输出: 1, 2, 3, 出现异常,循环已停止


在此示例中,当满足条件时,将引发异常,从而提前退出 forEach 循环。 但是,需要注意,你得正确处理此类异常以避免产生意外的副作用。

使用 for…of 循环 代替 forEach

ES6 (ECMAScript 2015) 中引入的 for…of 循环提供了一种现代、干净且可读的方式来迭代可迭代对象,例如数组、字符串、映射、集合等。
与 forEach 相比,它的主要优势在于它与 Break 和 continue 等控制语句的兼容性,为循环控制提供了更大的灵活性。

const numbers = [1, 2, 3, 4, 5];  
  
for (const number of numbers) {  
  if (number > 3) {  
    break; // 成功终止循环  
  }  
  console.log(number); // 1 2 3  
}


在此示例中,循环迭代numbers 数组中的每个元素。 一旦遇到大于3的数字,它就会使用break语句退出循环。 forEach 无法实现这种级别的控制。

总结

虽然 JavaScript 中的 forEach 方法提供了一种简单的数组迭代方法,但它缺乏中断或停止中循环的灵活性。
幸运的是,像 for…of 循环这样的替代方法,以及像 some() 和 every() 这样的方法,可以替代 forEach。

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1907505.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习-梯度下降算法-NLP(五)

梯度下降算法 深度学习中梯度下降算法简介找极小值问题数学上求最小值梯度梯度下降算法 找极小值问题在深度学习流程中深度学习整体流程图求解损失函数的目标权重的更新 深度学习中梯度下降算法简介 找极小值问题 引子: 我们训练一个人工智能模型,简单…

珍藏多年的计算机内核结构大全笔记,掌握计算机工作原理真不难

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人…

C++·栈和队列

栈和队列是什么看这里: 数据结构栈和队列-CSDN博客文章浏览阅读948次,点赞25次,收藏26次。本节讲解了栈和队列的内容,其核心就是栈的特点是后进先出,队列的特点是先进先出。并用C语言实现了栈和队列的结构以及它们的各…

ABAP注释快捷键修改(留着备用)

ABAP注释快捷键修改(留着备用) 在使用ABAP编辑器的时候,原有的添加代码注释和取消代码注释的快捷键未生效,这时我们可以考虑对注释快捷键进行修改 在事务码SE38(ABAP编辑器)屏幕右下角,点击【Options选项】图标 在【键盘】|【命令】输入栏中…

实战Qt开发WordBN笔记软件#01 搭建开发环境:VS2019+Qt6.5+CMake+Git

01 背景 【WordBN字远笔记】是天恩软件工作室开发的一款免费笔记软件;WordBN基于VS2019、Qt6.5开发,使用Qt Quick(QML)开发语言。 本课程将以【WordBN字远笔记】的界面为实战基础,详细介绍如何基于Qt/QML开发语言&am…

YOLOV8花朵实例分割实战

原文:YOLOV8花朵实例分割实战 - 知乎 (zhihu.com) 一、代码: https://github.com/ultralytics/ultralytics​github.com/ultralytics/ultralytics 与先前几个版本相比,YOLOv8 模型更快、更准确,同时为训练模型提供统一框架,以执行以下基本任务: 目标检测;实例分割;图…

pygame 音乐粒子特效

代码 import pygame import numpy as np import pymunk from pymunk import Vec2d import random import librosa import pydub# 初始化pygame pygame.init()# 创建屏幕 screen pygame.display.set_mode((1920*2-10, 1080*2-10)) clock pygame.time.Clock()# 加载音乐文件 a…

【微服务网关——https与http2代理实现】

1.https与http2代理 1.1 重新认识https与http2 https是http安全版本http2是一种传输协议两者并没有本质联系 1.1.1 https与http的区别 HTTP(超文本传输协议)和 HTTPS(安全超文本传输协议)是用于在网络上交换数据的两种协议。H…

基于DPU的云原生计算资源共池管理解决方案

1. 方案背景和挑战 在传统的云环境中,通常存在着不同的技术栈,支撑多样化的计算服务,具体如下: ① OpenStack环境与虚拟化云主机及裸金属服务 OpenStack是一个开源的云计算管理平台项目,它提供了部署和管理大规模计…

JAVA 代码块介绍

一、基本介绍 代码化块又称为初始化块,属于类中的成员[即 是类的一部分],类似于方法,将逻辑语句封装在方法体中,通过包围起来。 但和方法不同,没有方法名,没有返回,没有参数,只有方…

人工智能的新时代:从模型到应用的转变

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

NLP 面试八股:“Transformers / LLM 的词表应该选多大?“ 学姐这么告诉我答案

NLP 面试八股:“Transformers / LLM 的词表应该选多大?" 学姐这么告诉我答案 原创 看图学 看图学 2024年07月03日 07:55 北京 题目: Transformers/大模型的 token vocabulary 应该选多大? 答案 先说一下结论: 数据量够大…

南航秋招指南,线上测评和线下考试

南航秋招简介 南航作为国内一流的航空公司,对人才的需求量非常旺盛,每年也有很多专业对口的工作提供给应届毕业生,对于应届毕业生而言,一定要抓住任何一个应聘机会,并且在规定的范围内进行简历的提交,以便…

为什么需要重写equals和如何重写equals

首先先看Java中的 ,比较的两个对象的地址值。 如果是基本数据类型,那么就是比较的是值。 如果是引用数据类型,比较的就是地址. object类中的equals方法也是用的; 所以要比较两个对象的大小,去调用默认的equals方法…

鼠标宏怎么设置?6款鼠标自动点击器强推,游戏玩家专用!(2024全)

随着电子游戏和日常应用的不断发展,我们经常会遇到一些重复性的任务或操作。而在这种情况下,鼠标宏以其自动化的特点成为了许多玩家和使用者的利器之一。如果你正在寻找如何设置鼠标宏来简化操作并提高效率,那么你来对地方了。在本文中&#…

2024最新版若依-RuoYi-Vue3-PostgreSQL前后端分离项目部署手册教程

项目简介: RuoYi-Vue3-PostgreSQL 是一个基于 RuoYi-Vue3 框架并集成 PostgreSQL 数据库的项目。该项目提供了一套高效的前后端分离的开发解决方案,适用于中小型企业快速构建现代化的企业级应用。此项目结合了 RuoYi-Vue-Postgresql 和 RuoYi-Vue3 的优点&#xff0…

WEB06JavaScriptAjax

基础语法 引入方式 引入方式 内部脚本&#xff1a;将JS代码定义在HTML页面中 JavaScript代码必须位于<script></script>标签之间 在HTML文档中&#xff0c;可以在任意地方&#xff0c;放置任意数量的<script> 一般会把脚本置于<body>元素的底部&a…

matlab:对带参数a关于x的方程求解

题目 讲解 简洁对各个式子的内部含义用浅显易懂的话语总结出来了&#xff0c;耐心体会 f(a) (x)exp(x)x^ax^(sqrt(x))-100;%因为下面的fzero的第一个数需要一个fun&#xff0c;所以这里有两个句柄&#xff0c;第一个a是输入的&#xff0c;第二个x是需要被解出的 A0:0.1:2;%创…

提高生产效率和质量的六西格玛方法(优思学院)

想象一下&#xff0c;你被公司指派了一个重要项目&#xff0c;这家公司生产豪华汽车。当前&#xff0c;公司的生产数量正在下降&#xff0c;每天生产的汽车数量明显减少。此外&#xff0c;还存在安装在这些汽车上的雨刮器质量问题。你面临的挑战是找到解决方案&#xff0c;将生…

【CW32F030CxTx StartKit开发板】利用超声波传感器实现智能灯控

目录 1、超声波传感器 2、硬件连线 3. 程序开发 3.1 超声波测距 3.2 LED控制 4. 演示视频 本文首发于21ic。 感谢21ic和武汉芯源提供的测试机会。 在上一篇帖子中介绍了CW32F030CxTxStartKit 评估板的环境构建。本次介绍如何利用超声波传感器实现人来灯亮&#xff0c;人…