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;彭…

linux 查看网卡是否万兆_linux 如何查看网卡带宽

1.先查看网卡# ifconfigdocker0: flags4163 mtu 1500inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255inet6 fe80::42:acff:fe45:985 prefixlen 64 scopeid 0x20ether 02:42:ac:45:09:85 txqueuelen 0 (Ethernet)RX packets 141370815 bytes 100379736898 (93.4 …

计算机能力挑战赛_蓝桥杯、PAT、CCF CSP、团体程序设计天梯赛、传智杯、计算机能力挑战赛、软考等大学生编程比赛/考试介绍...

介绍7个适合普通大学生参加的编程比赛/考试&#xff08;注&#xff1a;有的比赛如蓝桥杯有多种赛别&#xff0c;本文仅介绍其中的程序设计/编程比赛&#xff09;。编程入门书籍推荐《算法笔记》&#xff0c;内容详细易懂&#xff0c;对新手非常友好&#xff0c;描述语言为C结合…

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…

python函数:基础函数调用整理

声明&#xff1a;以下链接和描述据来自于网络&#xff0c;很多都是来自菜鸟教程 一、字符串 str python字符串格式化符号:%c格式化字符及其ASCII码 %s格式化字符串%d格式化整数函数描述需要掌握(示例) print(name[0])  按索引取值(正向取反向取) &#xff1a;只能取print(nam…

云服务器主机性能测试,云服务器主机性能测试

弹性云服务器 ECS弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器&#xff0c;帮助用户打造可靠、安全、灵活、高效的应用环境&#xff0c;确保服务持久稳定运行&#xff0c;提升运维效率三年低至5折&#xff0c;多种配置可选了解详情Linux云服…

文治者必有武备不然长大了挨欺负_2017届高考语文全国卷文言文专题阅读15篇(附答案)...

2017届高考语文全国卷文言文专题阅读15篇(附答案)1.阅读下面这篇文言文&#xff0c;完成问题。高永能&#xff0c;字君举&#xff0c;世为绥州人。初&#xff0c;伯祖文呸举州来归&#xff0c;即拜团练使&#xff0c;已而弃之北迁&#xff0c;其祖文玉独留居延州&#xff0c;至…

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

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…

srgan要训练多久_SRGAN阅读笔记

AbstractCNN在传统的单帧超分辨率重建上取得了非常好的效果&#xff0c;可以取得较高的峰值信噪比(PSNR)。他们大都以MSE为最小化的目标函数&#xff0c;这样虽然可以取得较高的峰值信噪比&#xff0c;但是当图像下采样倍数较高时&#xff0c;重建的得到的图片会过于平滑&#…

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 (…