当前位置: 首页 > 面试题库 >

Javascript效率:“ for” vs“ forEach”

司徒元明
2023-03-14
问题内容

使用for()循环与.forEach的Javascript当前标准是什么?

我目前的工作我的方式,通过柯尔特史蒂尔斯的“Web开发训练营”在Udemy他热衷forEachfor他的教导。但是,作为课程工作的一部分,我在练习中搜索了各种东西,并且我发现越来越多的建议使用for-loop而不是forEach。大多数人似乎都说for循环更有效。

这是自编写本课程以来(大约2015年)以来发生的变化,还是它们各自的真​​正优缺点,您将通过更多的经验中学到这一点。

任何建议将不胜感激。


问题答案:

对于

for循环效率更高。它是一个循环结构,专门设计用于在条件为true时进行迭代,同时提供步进机制(通常用于增加迭代器)。例:

for (var i=0, n=arr.length; i < n; ++i ) {
   ...
}

这并不是说 for-loops总是会更高效,只是JS引擎和浏览器已经对其进行了优化。多年来,关于哪种循环构造更有效(折衷,减少,逆转等)一直存在折衷方案-不同的浏览器和JS引擎拥有自己的实现,这些实现提供了不同的方法来产生相同的结果。随着浏览器进一步优化以满足性能要求,从理论上讲[].forEach,它可以以更快的速度或与相当的方式实现for

好处:

  • 有效率的
  • 早期循环终止(荣誉breakcontinue
  • 条件控制(i<n可以是任何值,并且不限于数组的大小)
  • 变量范围(var ii循环结束后可用)

每次

.forEach是主要迭代数组(也遍历其他可枚举对象,例如MapSet对象)的方法。它们是较新的,并且提供的代码在主观上更易于阅读。例:

[].forEach((val, index)=>{
   ...
});

好处:

  • 不涉及变量设置(迭代数组的每个元素
  • functions / arrow-functions将变量范围限定在块上
    在上面的示例中,val它将是新创建的函数的参数。因此,val在循环之前调用的任何变量在结束后都将保留其值。

  • 从主观上讲,它更易于维护,因为它可能更容易识别代码在做什么—它遍历了可枚举的对象;而for循环可用于任何数量的循环方案

性能

性能是一个棘手的话题,通常在涉及前瞻性或方法时需要一些经验。为了提前(开发时)确定可能需要多少优化,程序员必须对问题案例的过往经验有很好的了解,并对潜在的解决方案有很好的理解。

在某些情况下,使用jQuery有时可能会太慢(有经验的开发人员可能知道),而在其他情况下则可能不是很重要,在这种情况下,库的跨浏览器合规性和易于执行其他功能(例如AJAX,事件处理)值得节省开发(和维护)时间。

另一个例子是,如果性能和优化就是一切,那么除了机器或程序集之外就没有其他代码了。显然,事实并非如此,因为有许多不同的高级和低级语言,每种语言都有自己的取舍。这些权衡包括但不限于专业化,开发简便性和速度,维护简便性和速度,优化代码,无错误代码等。

方法

如果您不太了解某些内容是否需要优化的代码,则通常最好先编写可维护的代码。从那里,您可以测试并找出需要时需要注意的地方。

也就是说,某些明显的优化应该是一般实践的一部分,而不需要任何思考。例如,考虑以下循环:

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

对于循环的每次迭代,JavaScript都会arr.length在每个循环上检索,进行键查找成本计算。没有理由不应该这样做:

for (var i=0, n=arr.length; i < n; ++i){}

这做同样的事情,但是只检索arr.length一次,缓存变量并优化代码。



 类似资料:
  • 问题内容: 您是否认为for … in和for循环有很大的不同?您更喜欢使用哪种“用于”,为什么? 假设我们有一个关联数组的数组: 这样我们就可以迭代: 和: 我没什么大不同。有性能问题吗? 问题答案: 该选择应基于对哪种习语最了解。 使用以下方法迭代数组: 使用以下方法来迭代用作关联数组的对象: 除非您有惊天动地的理由,否则请遵循既定的使用模式。

  • 问题内容: 出于好奇,我想知道在使用[ ] vs [ ] vs [ ] vs [ ](仅1个值)语法时,是否存在速度/效率差异? 相对 相对 相对 问题答案: 我将添加到 还存在 和 subquery 。 但是性能取决于给定SQL引擎的优化器。 在oracle中,IN和EXISTS之间有很多区别,但在SQL Server中不一定。 您还需要考虑的另一件事是所用色谱柱的选择性。一些情况表明,IN更好

  • 问题内容: (对于那些熟悉JVM编译和优化技巧的人来说是一个问题… :-) 是否有任何一种“ for”和“ foreach”模式明显优于另一种? 考虑以下两个示例: 是快或慢? 假设在这两种情况下,阵列都不需要进行任何健全性检查,是否有明显的获胜者或仍然太接近而无法进行跟注? 编辑:正如在某些答案中指出的,数组的性能应该相同,而“ foreach”模式对于像列表这样的抽象数据类型可能会稍好一些。

  • 问题内容: 我有一个可能包含数千个对象的模型。我想知道什么是最有效的方式来存储它们并在获得ID后检索单个对象。ID是长数字。 这些是我正在考虑的两个选项。在选项一中,它是一个带有递增索引的简单数组。在选项2中,如果有区别,它是一个关联数组,也可能是一个对象。我的问题是,当我主要需要检索单个对象时,有时又遍历它们并进行排序时,哪一个效率更高。 具有非关联数组的选项一: 选项2与关联数组: 更新: 好

  • Visual Studio Code 的 MySQL 管理工具 功能 管理 MySQL 连接 查看 MySQL 服务器 查看 MySQL 数据库 查看 MySQL 数据表 执行 MySQL 查询语句 运行截图