0

0

比较 JavaScript 中迭代数组的 4 种方法

王林

王林

发布时间:2023-09-04 08:25:02

|

795人浏览过

|

来源于php中文网

原创

比较 javascript 中迭代数组的 4 种方法

如果您已经了解 JavaScript 数组的基础知识,那么是时候通过更高级的主题将您的技能提升到新的水平了。在本系列教程中,您将探索在 JavaScript 中使用数组进行编程的中级主题。

几乎在每个涉及数组的项目中,我们都必须执行迭代或循环数组的操作。您可能需要循环数组的原因有很多,例如将数组数据显示为输出或对其进行转换。

您可以使用许多方法在 JavaScript 中迭代数组。在本教程中,我们将了解所有这些,同时详细讨论每个的优点或缺点。

方法     优点 缺点
for循环     可以使用 break 提前退出,适用于异步代码,通用浏览器支持 冗长且容易出错
forEach()方法     简洁易读 没有异步支持,没有提前退出 break
for...of循环     与其他可迭代类型一起使用,允许提前退出,语法减少错误 旧版浏览器支持较少
for...in循环     在稀疏数组上高效,允许提前退出 可能返回意外的继承元素
方法 带有中断和继续的流控制? 可以使用异步代码吗? 浏览器支持 注释
for循环 所有浏览器 更详细的语法,一对一错误
forEach()方法

没有

立即学习Java免费学习笔记(深入)”;

没有 现代浏览器 简洁并链接在其他函数之后(即map
for...of循环

是的

现代浏览器 简单的语法减少错误
for...in循环 所有浏览器 对于稀疏数组有效,可以返回意外的(继承的)元素

访问数组元素的基础知识

让我们从使用索引访问数组元素的基础知识开始。 JavaScript 中的数组索引从 0 开始。这意味着可以通过在代码中使用 array_name[0] 来访问第一个元素。同样,对于包含 n 元素的数组,可以使用 array_name[n - 1] 访问最后一个元素。

let animals = ["Fox", "Dog", "Lion", "Cat", "Zebra"];

let first = animals[0];

let last = animals[4];

console.log(first);
// Outputs: Fox

console.log(last);
// Outputs: Zebra

使用 for 循环进行迭代

循环数组的最常见方法之一是 for 循环。 for 循环将迭代变量初始化为 0,以从第一个元素开始循环。由于我们想要迭代整个数组,因此需要计算数组的长度,这可以使用 length 属性轻松完成。然后可以使用 array_name[length - 1] 访问数组中的最后一个元素。

以下代码片段向我们展示了如何使用 for 循环顺序循环遍历数组:

let animals = ["Fox", "Dog", "Lion", "Cat", "Zebra"];

let animal_count = animals.length;

for(let i = 0; i < animal_count; i++) {
  console.log(animals[i]);
}
/* Outputs:
Fox
Dog
Lion
Cat
Zebra
*/

请注意我们如何使用小于运算符 () 而不是小于或等于运算符 () 作为循环结束条件。

在循环数组时使用 for 循环有两个优点:它得到广泛支持,并且允许您通过 breakcontinue 语句控制循环流程。一旦找到所需内容,您就可以退出循环。当您处理异步代码时,for 循环也能很好地工作。

缺点是它有点冗长,并且您可能偶尔会犯一些小错误。

使用 forEach() 方法进行迭代

您还可以使用内置的 forEach() 方法在 JavaScript 中迭代数组。该方法接受一个回调函数作为其参数,该函数对每个数组元素执行一次。回调函数可以在其他地方定义,它可以是内联函数或箭头函数。

回调函数可以接受三个不同的参数:

  1. 当前元素本身
  2. 当前元素的索引
  3. 我们调用 forEach() 方法的数组
let animals = ["Fox", "Dog", "Lion", "Cat", "Zebra"];

animals.forEach(animal => console.log(animal));
/* Outputs:
Fox
Dog
Lion
Cat
Zebra
*/

如您所见,使用 forEach() 方法使我们的代码更加简洁。这是使用回调函数的第二个参数的另一个示例。

let animals = ["Fox", "Dog", "Lion", "Cat", "Zebra"];

animals.forEach((animal, idx) => {
  console.log(`Animal ${idx + 1}: ${animal}`);
});
/* Outputs:
Animal 1: Fox
Animal 2: Dog
Animal 3: Lion
Animal 4: Cat
Animal 5: Zebra
*/

使用 forEach() 非常适合对数组进行简单迭代。但是,不能使用 breakcontinue 中途退出循环并更改程序流程。使用 forEach() 的另一个缺点是您无法通过此方法使用异步代码。

析稿Ai写作
析稿Ai写作

科研人的高效工具:AI论文自动生成,十分钟万字,无限大纲规划写作思路。

下载

使用 for...of 循环进行迭代

ES6标准为JavaScript添加了很多新功能。其中之一是迭代器和可迭代对象的概念。您可以使用 for...of 循环来迭代实现 @@iterator 方法的任何对象中的值。内置类型(例如 Array、String、Set 或 Map)可以使用 for...of 循环来迭代它们的值。

let animals = ["Fox", "Dog", "Lion", "Cat", "Zebra"];

for(let animal of animals) {
  console.log(animal);
}
/* Outputs:
Fox
Dog
Lion
Cat
Zebra
*/

使用 for...of 构造进行迭代有很多优点。例如,您也可以使用它来迭代其他内置可迭代类型。除此之外,它允许您使用 breakcontinue 语句跳出循环并控制程序流程。

唯一的潜在缺点是浏览器支持稍少,但这完全取决于您的目标受众。

使用 for...in 循环进行迭代

您还可以使用 for...in 语句循环遍历数组。这将循环遍历对象的所有可枚举字符串属性。这还包括继承的可枚举属性。

我想在这里提一下,不建议使用 for...in 语句迭代循环。这是因为,正如我之前提到的,该语句将迭代所有整数和非整数属性,即使它们是继承的。当我们迭代数组时,我们通常只对整数键感兴趣。

for...in 循环的遍历顺序定义良好,它从非负整数键的遍历开始。非负整数键按值升序遍历。然后按照创建的顺序遍历其他字符串键。

稀疏数组是一种可以用 for...in 循环比其他方法更好地遍历的数组类型。例如, for...of 循环将迭代稀疏数组中的所有空槽,而 for...in 循环则不会。

这是使用 for...in 循环迭代稀疏数组的示例:

let words = new Array(10000);

words[0] = "pie";
words[548] = "language";
words[3497] = "hungry";

for(let idx in words) {
  if(Object.hasOwn(words, idx)) {
    console.log(`Position ${idx}: ${words[idx]}`);
  }
}
/* Outputs:
Position 0: pie
Position 548: language
Position 3497: hungry
*/

您可能已经注意到,我们使用了一个名为 Object.hasOwn() 的静态方法来检查查询对象的指定属性是否确实是其自己的属性。

最终想法

您始终可以使用常规 for 循环来迭代数组。它允许您借助 breakContinue 关键字来控制程序流程,同时还支持异步代码。另一方面,它确实要求您小心差一错误。

forEach() 方法提供了一种更短的循环数组的方法,但它不适用于异步代码。您也无法使用 breakcontinue 跳出循环或控制程序流程。

for...of 循环给了我们两全其美的好处。我们可以完全控制程序流程,并且它也适用于异步代码。也无需担心差一错误。

最后,for...in 循环不是循环数组的推荐方法。但是,如果您正在遍历的数组非常稀疏,那么它可能会很有用。

本文的缩略图是使用 OpenAI 的 DALL-E 2 生成的。

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

23

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

11

2026.01.19

java输出数组相关教程
java输出数组相关教程

本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.19

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

2

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

4

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

13

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

93

2026.01.18

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

112

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

155

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号