”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 理解 JavaScript 数组迭代方法

理解 JavaScript 数组迭代方法

发布于2024-11-08
浏览:297

Understanding JavaScript Array Iteration Methods

我最近遇到一个面试问题,要求使用不同的方法来迭代 JavaScript 数组对象。提示最初看起来很简单,因为我需要提供一些示例代码片段。然而,这个问题引起了我的兴趣,所以我决定更深入地研究每种方法,不仅探索如何使用它们,而且探索何时以及为何选择一种方法而不是另一种方法。

在本文中,我将引导您了解在 JavaScript 中迭代数组的各种方法,重点介绍它们的差异、优点和用例。

for 循环
优点

  • 灵活性:for 循环通过允许使用break 退出循环或继续跳到下一次迭代来提供灵活性。您还可以直接指定索引,从而精确控制循环的行为。
  • 非顺序顺序:您可以通过调整循环条件来控制迭代顺序,例如向后迭代或跳过某些元素。

在引入 for...of 循环之前,传统的 for 循环是数组迭代的标准方法。然而,它很容易出现错误,例如从 1 而不是 0 开始索引,或者错误地使用 arr.length 而不是 arr.length - 1。正如 MDN 所建议的,“通常最好用于...如果可以的话。"

何时使用
当您需要完全控制迭代时,例如跳过迭代或反向迭代。
当您在迭代过程中同时需要索引和值时。

为...的
优点

  • 简单性和建议:for...of 循环是一种简单且推荐的迭代数组的方法,因为它会自动为您处理索引。您仍然可以根据值而不是索引使用break退出循环或继续跳到下一次迭代。

何时使用
当您只需要使用值而不需要访问索引时。

Array.prototype.map()
优点

  • Non-mutating:原始数组保持不变。
  • 返回一个新数组:将指定的函数应用于每个元素后,map() 返回一个包含结果的新数组。这使得它非常适合函数式编程。

何时使用
当您想要将函数应用于数组的每个元素并需要将结果作为新数组时。

Array.prototype.forEach()
优点

  • 无返回值:forEach() 允许您对每个元素执行函数而不返回新数组。它通常用于执行副作用,例如记录日志、更新变量或操作 DOM。

何时使用
当您想要将函数应用于数组的每个元素但不需要返回新数组时。

Array.prototype.entries()
优点

  • 访问索引和值:entries() 返回一个迭代器,该迭代器提供每个元素的索引和值。这比使用传统的 for 循环更简单且更具可读性。如果数组槽为空,则返回值未定义。

何时使用
当您需要访问数组元素的索引和值时。

Array.prototype.keys()
优点

  • 访问索引:keys() 返回数组索引的迭代器。当您只需要索引而不需要值时,这非常有用。在稀疏数组中,[...arr.keys()] 还将包含空槽的索引(其中值未定义)。

何时使用
当您需要一个仅提供数组元素索引的迭代器时。

Array.prototype.values()
优点

  • 访问值:values() 返回数组值的迭代器。这类似于对数组使用 for...of,但提供迭代器而不是循环。

何时使用
当您需要一个仅提供数组元素值的迭代器时。

什么是数组迭代器:
Array.prototype.entries()、Array.prototype.keys() 和 Array.prototype.values() 返回新的数组迭代器对象。这些迭代器允许您一次遍历一个类似数组的集合中的一个元素。它们带有 next() 方法,该方法提供序列中的下一个值,可以根据需要调用该方法,从而有助于节省内存。

这是一个使用entries()的例子:

const arr = ['a', 'b', 'c'];
const iterator = arr.entries();

console.log(iterator.next()); // { value: [0, 'a'], done: false }
console.log(iterator.next()); // { value: [1, 'b'], done: false }
console.log(iterator.next()); // { value: [2, 'c'], done: false }
console.log(iterator.next()); // { value: undefined, done: true }

说实话,我并没有完全了解这些方法的一些细节和用途,所以解决这个面试问题并加深我的理解非常重要。无论您使用的是基本循环还是更高级的函数式编程技术,了解这些方法都可以显着提高代码的效率和可读性。

版本声明 本文转载于:https://dev.to/ayako_yk/understanding-javascript-array-iteration-methods-8e?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • jQuery获取单选按钮组的值
    jQuery获取单选按钮组的值
    [2 本文提供了有关操纵单个按钮组的简洁jQuery代码段和答案。 [2 获取所选广播按钮值的最简单方法是: $('输入:无线​​电[名称=主题]:checked')。val(); 另外,如果您在选择时需要值: $('输入:无线​​电[name = theme]'...
    编程 发布于2025-04-18
  • 如何在Java字符串中有效替换多个子字符串?
    如何在Java字符串中有效替换多个子字符串?
    在java 中有效地替换多个substring,需要在需要替换一个字符串中的多个substring的情况下,很容易求助于重复应用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    编程 发布于2025-04-18
  • 为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    使用php dateTime修改月份:发现预期的行为在使用PHP的DateTime类时,添加或减去几个月可能并不总是会产生预期的结果。正如文档所警告的那样,“当心”这些操作的“不像看起来那样直观。 ; $ date->修改('1个月'); //前进1个月 echo $ date->...
    编程 发布于2025-04-18
  • 如何检查对象是否具有Python中的特定属性?
    如何检查对象是否具有Python中的特定属性?
    方法来确定对象属性存在寻求一种方法来验证对象中特定属性的存在。考虑以下示例,其中尝试访问不确定属性会引起错误: >>> a = someClass() >>> A.property Trackback(最近的最新电话): 文件“ ”,第1行, AttributeError: SomeClass...
    编程 发布于2025-04-18
  • 如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在“ dd/mm/yyyy hh:mm:mm:ss.ss”格式“ gormat 解决方案:的,请访问量很大,并应为procectiquiestate的,并在整个代码上正确格式不多: java.text.simpledateformat; 导入java.util.calendar; 导入java...
    编程 发布于2025-04-18
  • 如何在GO编译器中自定义编译优化?
    如何在GO编译器中自定义编译优化?
    在GO编译器中自定义编译优化 GO中的默认编译过程遵循特定的优化策略。 However, users may need to adjust these optimizations for specific requirements.Optimization Control in Go Compi...
    编程 发布于2025-04-18
  • 为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    The Mystery of "Broken" Two-Phase Template Instantiation in Microsoft Visual C Problem Statement:Users commonly express concerns that Micro...
    编程 发布于2025-04-18
  • FastAPI自定义404页面创建指南
    FastAPI自定义404页面创建指南
    response = await call_next(request) if response.status_code == 404: return RedirectResponse("https://fastapi.tiangolo.com") else: ...
    编程 发布于2025-04-18
  • 找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    如何在mySQL中使用mySql 检索最大计数,您可能会遇到一个问题,您可能会在尝试使用以下命令:理解错误正确找到由名称列分组的值的最大计数,请使用以下修改后的查询: 计数(*)为c 来自EMP1 按名称组 c desc订购 限制1 查询说明 select语句提取名称列和每个名称...
    编程 发布于2025-04-18
  • 使用MySQLi获取单列一维数组方法
    使用MySQLi获取单列一维数组方法
    如何使用mysqli?在尝试将电子邮件列表从我的imssql database中获取时,如何将单列值作为一维数组作为一维数组。您会收到一个多维数组。,您的问题在于用于从数据库获取数据的方法。要将数据作为单列值的数组检索,您应该使用fetch_assoc()方法而不是fetch_row()。这是一个...
    编程 发布于2025-04-18
  • 如何使用Regex在PHP中有效地提取括号内的文本
    如何使用Regex在PHP中有效地提取括号内的文本
    php:在括号内提取文本在处理括号内的文本时,找到最有效的解决方案是必不可少的。一种方法是利用PHP的字符串操作函数,如下所示: 作为替代 $ text ='忽略除此之外的一切(text)'; preg_match('#((。 &&& [Regex使用模式来搜索特...
    编程 发布于2025-04-18
  • 大批
    大批
    [2 数组是对象,因此它们在JS中也具有方法。 切片(开始):在新数组中提取部分数组,而无需突变原始数组。 令ARR = ['a','b','c','d','e']; // USECASE:提取直到索引作...
    编程 发布于2025-04-18
  • 如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    从python import codecs import codecs import codecs 导入 text = codecs.decode('这狗\ u0001f602'.encode('utf-8'),'utf-8') 印刷(文字)#带有...
    编程 发布于2025-04-18
  • 异步Promise重试的设计模式有哪些?
    异步Promise重试的设计模式有哪些?
    Designing Patterns for Promise RetriesIn asynchronous programming, it's often useful to retry failed promises until they resolve.以下是三个设计模式,用于实现这一目...
    编程 发布于2025-04-18
  • 如何使用Python有效地以相反顺序读取大型文件?
    如何使用Python有效地以相反顺序读取大型文件?
    在python 中,如果您使用一个大文件,并且需要从最后一行读取其内容,则在第一行到第一行,Python的内置功能可能不合适。这是解决此任务的有效解决方案:反向行读取器生成器 == ord('\ n'): 缓冲区=缓冲区[:-1] ...
    编程 发布于2025-04-18

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3