foreach 循环达到条件的第一次就停止_是否应该停止在JavaScript代码中使用forEach()?...

在本文中,我想概述一下标准的 for 循环和 forEach() 方法背后的区别,并对它们各自带来的一些好处进行评论。

作为免责声明,请不要把标题当真。我写这篇文章的目的是为了让读者了解缺点,并提供一些关于什么时候可以或不可以使用 forEach() 的见解,仅此而已。

e9d44f46da6fb0f16d30cc32030371b7.png

forEach如何工作

forEach 方法接受回调函数作为输入,对于要迭代的数组中的每个元素,将执行此回调函数。应该注意的是,回调函数可以接受一些可选参数。它们包括传递给函数的当前值,当前值的相应索引。forEach 函数还提供了一个可选的参数,用于在你的回调函数中定义。

考虑以下代码:

5ad9b385a7c4422ce58c39dc02ce933d.png

相应的输出为:

corgis - 0are - 1cool - 2

短路

如果您不知道什么是短路,它指的是我们提前终止或跳过循环的一个迭代。当我们在使用 forEach() 的时候,没有办法利用短路,在我们的循环的所有情况下,我们将忍受与数组大小有关的线性运行时间。

我为什么要关心这个?想象一下,我们有10亿个元素的未排序数组,而我们想找到某个元素。假设我们非常幸运,并在循环的第一次迭代中找到了这个元素。实际上,我们希望尽早返回,因为我们已经找到了我们想要的东西,但是在实现 forEach() 的方式中,我们总是会遍历剩下的元素。对于此类问题,我们可能会使用 .findIndex() 方法。

性能

forEach() 方法中,由于我们在每次迭代时都要调用一个回调函数,所以我们产生了一个额外的作用域开销,与原生的 for 循环相比会导致速度变慢。

与传统的 for 循环相比,我们有一个初始化语句、一个在每次迭代中求值的条件语句和一个在循环体递增后的执行阶段。相对于 forEach() 方法,我们必须在每次迭代时创建额外的函数调用,它的成本更低。

为了测试性能,我创建了一个计时器脚本,该脚本在初始化数组后跟踪执行时间。这两个循环在其体内都执行了一个简单的 O(1) 操作:

c70446df0015588b85d0eb1774a38b79.png

可读性

在开发软件时,创建可维护和可读的代码应该是头等大事。我认为在代码中继续使用 forEach() 是为了提高可读性。随着方法链几乎成为JavaScript中数组的第二天性,使用 forEach() 循环来运行数组,而不是 for 循环,这样读起来会更好。

还应该注意的是,像上面的例子中的输入尺寸非常大的情况,往往不太可能出现。在合理的输入大小下,这两个回路的性能相对相同。

你是否愿意以牺牲可读性为代价,以更快的速度执行几毫秒的功能?


如果对你有所启发和帮助,可以点个关注、收藏、转发,也可以留言讨论,这是对作者的最大鼓励。

作者简介:Web前端工程师,全栈开发工程师、持续学习者。

私信回复大礼包送某网精品视频课程网盘资料,准能为你节省不少钱!

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

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

相关文章

git 忽略__pycache___容易被忽略的 Python 命令行参数

上周编写了一个 Python 脚本用于将一堆包含 oracle dmp 文件的 rar 压缩包恢复到 oracle 数据库。由于 oracle dmp 文件恢复速度较慢,通过 nohup commad 2>&1 & 提交命令到后台运行。运行过程中发现通过 print 命令输出内容无法及时地重定向到 nohup.out…

kindeditor和easyui整合出不来

1.首先必备的三个导入的文件 <link rel"stylesheet" href"/day0320_maven_pm/libs/kindeditor/themes/default/default.css"/> <script charset"utf-8" src"/day0320_maven_pm/libs/kindeditor/kindeditor-all-min.js">&l…

虚拟机共享服务器设置,虚拟机共享网络设置教程

vm虚拟机网络共享设置&#xff1a;设置以前首先要确认“虚拟机”中的“本地连接”IP地址为自动获得&#xff01;1.在虚拟机设置里&#xff0c;单击以太网----网络连接类型为---NTA 使用以共享的主机IP地址&#xff01;2.单击编辑---虚拟网络参数&#xff01;3.单击自动桥接。去…

靠数学“拿了”两次诺贝尔奖,彭罗斯从“铺地砖”帮忙发现2011年化学奖的秘密...

来源&#xff1a;量子位诺贝尔奖没有数学奖&#xff0c;但是如果数学足够好的话&#xff0c;可以拿两次诺贝尔奖&#xff1a;帮别人拿一次&#xff0c;自己再拿一次。刚刚获得诺贝尔奖的英国数学家罗杰彭罗斯&#xff08;Roger Penrose&#xff09;就是这样。今年&#xff0c;彭…

PowerDesigner 中SQL文件、数据库表反向生成PDM

1 反向生成PDM 1) 创建一个空的PDM模型&#xff08;选择对应的DBMS&#xff09;&#xff1a; 2) 选择【Database】--【Update Model from Database…】菜单&#xff1a; 1.1 使用SQL文件 1) 在新窗口选择对应【Using script files】--【&#xff…

上传excel文件到服务器,excel怎么上传到云服务器

excel怎么上传到云服务器 内容精选换一换安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具&#xff0c;将文件上传到云服务器。例如QQ.exe。在本地主机和Windows云服务器上分别安装数据传输工具&#xff0c;将文件上传到云服务器。例如QQ.exe。本地磁盘映射(推荐…

沈南鹏谈科学:第一性原理,“无为”而“有趣”

勇于探索未知&#xff0c;才能发展科学。10月30日-11月1日&#xff0c;第三届世界顶尖科学家论坛在上海举行。今年的世界顶尖科学家论坛是特殊之年的一场世界级科学盛会。横跨四大洲、11个时区、25个国家和地区、100多座城市&#xff0c;此次论坛云集了全球230余位科学家&#…

设置目录_[LaTeX 尝试] titletoc - 为算法目录、定理目录等设置子目录

本文已加入专栏文章目录&#xff0c;归入「进阶使用」文章系列。titletoc 宏包提供了定制目录列表样式的功能&#xff0c;本文主要讨论其中的「创建子目录」功能。标准目录的子目录LaTeX 的典型目录通过 tableofcontents 输出&#xff0c;一个文档里最多使用一次。在实践中&…

postgresql 远程用户_构建Python pandas基于SSH远程MySQL和PostgreSQL的数据分析

背景知识视频教程Python中使用Pandas教程 - 国外课栈​viadean.comPandas数据分析与探索 - 国外课栈​viadean.com如果您无法从外部环境直接访问数据库&#xff0c;则可能需要SSH隧道来查询它。 在这篇文章中&#xff0c;我将向您展示如何通过SSH连接并查询MySQL数据库到Pandas…

达尔文之过:人类真的和其他生物平等吗?

1859年发表的《物种起源》 图片来源&#xff1a;Wikimedia Commons来源&#xff1a;环球科学人类在自然界中的地位&#xff0c;真的如达尔文与赫胥黎认为的那样&#xff0c;“与其他生物平等”吗&#xff1f;这种贬抑人类地位的理想化理念&#xff0c;或许推进了人类对大自然肆…

c++矩阵连乘的动态规划算法并输出_算法面试必修课,动态规划基础题型归纳(三)

动态规划&#xff08;Dynamic Programming&#xff0c;简称DP&#xff09;&#xff0c;是大家都觉得比较难以掌握的算法。为了应付面试&#xff0c;我们经常会背诵一下DP问题的源码&#xff0c;其实&#xff0c;只要理解了思想&#xff0c;掌握基本的模型&#xff0c;然后再来点…

css 学习记录

如何引入css 内联样式 在标签内 添加style style标签 外联式写法 新建CSS文件 通过用link标签引入css样式文件 import url(../);、 css语法 选择器 {属性&#xff1a;值&#xff1b;} CSS属性 float的属性可以使元素左右浮动 设置字体的样式 color属性 用于 设置字体颜色 …

网站服务器睡眠后还能访问吗,远程服务器可以睡眠吗

远程服务器可以睡眠吗 内容精选换一换已成功添加Guardian。如果Guardian处于在线状态&#xff0c;只允许修改Guardian名称。如果Guardian处于连接超时状态&#xff0c;可以输入登录远程服务器的用户名和密码重新部署Guardian。如果Guardian处于在线状态&#xff0c;只允许修改G…

sql server如何输出排序序号_Group by中子查询order by排序失效问题分析

通过sql分组查询数据时&#xff0c;一般通过group by来完成&#xff0c;group by默认取相同的分组列(一列或者多列)中第一个数据。如果想获取sql分组中id最大的记录&#xff0c;我们可能想到的sql如下&#xff08;name列作为分组&#xff09;&#xff1a;select id,name from (…

深入学习Redis(1):Redis内存模型

前言 Redis是目前最火爆的内存数据库之一&#xff0c;通过在内存中读写数据&#xff0c;大大提高了读写速度&#xff0c;可以说Redis是实现网站高并发不可或缺的一部分。 我们使用Redis时&#xff0c;会接触Redis的5种对象类型&#xff08;字符串、哈希、列表、集合、有序集合&…

对话“互联网先驱”:星际互联网究竟可不可行?

Vinton Cerf曾在四十年前协助创造了互联网&#xff0c;如今他仍在努力帮助世界各地的人们建立联系。来源丨Quantamagazine作者丨Susan DAgostino编译丨科技行者Vinton Cerf&#xff0c;互联网之父之一&#xff0c;正在建立行星际互联网方面发挥着关键作用。太空探索困难重重&am…

烽火服务器怎么进入bios系统,装机高手告诉你如何进入bios

如何进入bios是很多装机技术人员才会研讨的问题&#xff0c;可是我们生活中依然有时分需求用到bios设置&#xff0c;这时分我们应该如何进入bios呢?说实话不同的电脑、型号都有不同的进入bios方法&#xff0c;但是关于主流的系统品牌来说&#xff0c;如何进入bios的方法大多都…

折弯弹性计算公式_冲压模具:影响回弹因素、回弹计算公式计算,值得收藏

回弹&#xff0c;设计师都会遇到&#xff0c;而且无法避免&#xff0c;只能想办法补偿或者降低影响。那什么是回弹呢&#xff1f;金属材料在塑性弯曲时总是伴随著弹性变形&#xff0c;因此当弯矩去掉之后&#xff0c;弯曲件的弯曲半径变得与模具尺寸不一致&#xff0c;这种现象…

image是否有disabled属性_Vue学习笔记 模板语法、计算属性

点击上方“蓝字”关注我们吧&#xff01;vue学习笔记官网&#xff1a;https://cn.vuejs.org/v2/guide/1、vue体验demo示例&#xff1a;image.png示例代码&#xff1a;<html lang"en"> <head> <meta charset"UTF-8" /> <meta n…

分析 | MEMS传感器市场报告

来源&#xff1a;核芯产业观察1、MEMS 发展迅速&#xff0c;Yole Development 预计 2023 年市场规模超 300 亿美元MEMS 全称为 Micro-Electro Mechanical System&#xff0c;即微机电系统&#xff0c;是集微型传感器、执行器、机械结构、电源能源、信号处理、控制电路、高性能电…