首页 游戏 软件 资讯 排行榜 专题
首页
前端开发
如何用 entries 获取数组的键值对迭代器进行循环

如何用 entries 获取数组的键值对迭代器进行循环

热心网友
37
转载
2026-04-28

entries() 返回 Array Iterator 对象,按索引升序产出 [index, value] 二元数组

如何用 entries 获取数组的键值对迭代器进行循环

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

entries() 返回的是什么类型的迭代器

当你调用数组的 entries() 方法时,它给你的并不是一个普通的数组,而是一个专门的 Array Iterator 对象。这个迭代器会严格按照索引从低到高的顺序,一个接一个地产出形如 [index, value] 的二元数组。这里有个常见的“坑”:因为它产出的是数组结构,所以你不能像处理对象那样,直接用 for...in 去遍历,或者试图不解构就获得数据。

举个例子,如果写下 for (const item of arr.entries()) { console.log(item); },控制台打印出的会是 [0, “a”][1, “b”] 这样的数组。若你误以为 item 是个对象,去访问 item.keyitem.value,结果只能是 undefined

正确解构 entries() 的每一项

想优雅地拿到索引和值?窍门在于使用数组解构语法,精准匹配它产出的二元数组结构。业内最通用、最推荐的写法是这样的:

for (const [index, value] of arr.entries()) {
  console.log(index, value);
}

当然,也存在其他合法的写法,不过从代码的简洁性和可读性角度看,就不太推荐了:

  • for (const pair of arr.entries()) { const [i, v] = pair; } —— 多了一层解构,显得有些冗余。
  • const iter = arr.entries(); console.log(iter.next().value); —— 这是手动调用迭代器的 next() 方法,通常只在需要精细控制迭代过程(比如中断或条件推进)时才会用到。

还有一点需要注意:别尝试写成 for (const {0: i, 1: v} of arr.entries()) 这种形式。对象解构在这里不适用,因为它无法直接展开数字属性名。虽然可以先把数组项转成对象,但实在没那个必要,徒增复杂度。

entries() 和 for...of / Array.from / 扩展运算符的兼容性

好消息是,entries() 返回的迭代器完全遵循 Ja vaScript 的迭代协议,可以被所有原生支持该协议的语法轻松“消费”。主流的用法包括:

  • for...of 循环:这是最常用、最直观的方式,适合直接遍历处理。
  • Array.from(arr.entries()):这会把所有 [index, value] 对一次性收集起来,生成一个形如 [[0,a], [1,b], ...] 的二维数组。当你需要把结果缓存下来,供后续多次查询或处理时,这个方法很管用。
  • [...arr.entries()]:扩展运算符能达到和 Array.from 一样的效果,而且写法更简洁,是当下更流行的风格。

这里得提个性能上的小建议:如果只是单次遍历,并且不需要保留索引之外的复杂信息,那么使用 for...of 配合解构是最轻量、最高效的选择。反之,如果后续可能还需要多次访问这些键值对,那就用 Array.from() 转换成数组存起来更稳妥,毕竟 entries() 返回的迭代器只能被消费一次。

entries() 在稀疏数组和类数组对象上的行为差异

entries() 在面对不同类型的“数组”时,表现并不完全一致。

对于标准的 Ja vaScript 数组,即便是存在空位(hole)的稀疏数组,entries() 也会忠实地为每一个索引位置产出一项,空位则会以 [index, undefined] 的形式呈现。

然而,它的“能力范围”并不覆盖**类数组对象**,比如函数内的 arguments 对象,或者 DOM 操作返回的 NodeList。这些对象本身并没有 entries 方法。要想对它们进行类似数组的索引-值遍历,一个安全的做法是先将其转化为真正的数组:

for (const [i, el] of Array.from(document.querySelectorAll('div')).entries()) {
  // 现在可以安全操作了
}

当然,理论上你也可以用 Array.prototype.entries.call(nodeList) 这种方式来“借用”方法,但这么做代码可读性会大打折扣,一般不推荐在项目中使用。

来源:https://www.php.cn/faq/2303858.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

黑白双鹰,白金降临:技嘉猎鹰/冰猎鹰白金电源4月27日开售
游戏资讯
黑白双鹰,白金降临:技嘉猎鹰/冰猎鹰白金电源4月27日开售

技嘉猎鹰白金电源系列即将发售:高效能供电新选择 对于追求极致性能的玩家和创作者来说,电源的选择往往决定了整套系统的稳定基石。好消息是,一个值得关注的新选项即将登场。技嘉科技正式宣布,其全新的EAGLE猎鹰白金与冰猎鹰白金电源系列,将于4月27日在京东平台揭开面纱。这个系列精准地覆盖了从750W到10

热心网友
04.28
阿里Happyhorse正式入场,这匹黑马能成功“掀桌”吗?
业界动态
阿里Happyhorse正式入场,这匹黑马能成功“掀桌”吗?

让行业等待了整整20天的神秘小马,今天终于正式亮相 4月27日,阿里HappyHorse 1 0正式开启灰测。官网、阿里云百炼平台、千问App三个官方入口同步开放,巨日禄、Libtv等一批第三方AI视频平台也在同一天宣布接入——这种官方渠道与第三方生态同步铺开的节奏,意味着这次不是小范围试水,而是一

热心网友
04.28
思仪科技:供销绑定大股东中国电科,手握16亿现金仍募巨资补流
科技数码
思仪科技:供销绑定大股东中国电科,手握16亿现金仍募巨资补流

4月28日,中电科思仪科技股份有限公司(下称“思仪科技”)将迎来创业板IPO上会,计划公开发行不低于9175 93万股且不超过27527 82万股。 表面上看,思仪科技报告期内业绩增长势头强劲,但深入审视其经营基本面,多重隐患已然浮现。其中,业务独立性、研发效率与募资合理性这三大核心问题,尤为值得市

热心网友
04.28
仅重420g的大光圈定焦 尼克尔Z 50mm f/1.4售3499元
业界动态
仅重420g的大光圈定焦 尼克尔Z 50mm f/1.4售3499元

全画幅标准定焦头 尼克尔 Z 50mm f 1 4售3499元 在尼康Z卡口镜头阵营里,有一支镜头的开发理念与广受好评的Z 35mm f 1 4颇有异曲同工之妙,那就是尼克尔 Z 50mm f 1 4。作为一款标准定焦镜头,它凭借f 1 4的恒定大光圈、出色的便携性以及全面的性能,成为了一个非常值得

热心网友
04.28
《使命召唤》电影导演引争议 曾批评玩家是键盘侠而且软弱
游戏资讯
《使命召唤》电影导演引争议 曾批评玩家是键盘侠而且软弱

2025年《使命召唤》遭遇滑铁卢,微软如何破局? 2025年对《使命召唤》系列而言,算得上是个“小年”。无论是营收数据,还是玩家投入的游玩时长,都在各个平台遭遇了大幅下滑,跌幅高达60%。面对这样的局面,微软显然坐不住了,已经开始着手布局,防止类似情况再次上演。而他们打出的一张关键牌,便是试图通过一

热心网友
04.28

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

MySQL视图如何处理自增主键映射_逻辑主键生成策略
数据库
MySQL视图如何处理自增主键映射_逻辑主键生成策略

MySQL视图自增主键映射与逻辑主键生成方案详解 在数据库设计与优化实践中,视图(View)是简化复杂查询、封装业务逻辑的强大工具。然而,许多开发者在操作视图时,常希望实现类似数据表的自动主键生成功能,这在实际应用中却面临诸多限制。本文将深入解析MySQL视图与自增主键的关系,并提供切实可行的逻辑主

热心网友
04.28
mysql数据库字符集如何统一调整_修改配置文件解决乱码问题
数据库
mysql数据库字符集如何统一调整_修改配置文件解决乱码问题

MySQL启动时默认字符集没生效?检查my cnf的加载顺序和位置 先明确一个关键点:MySQL启动时,并不会漫无目的地去读取所有可能的配置文件。它有一套固定的、按优先级排列的查找路径(通常是 etc my cnf、 etc mysql my cnf,最后才是 ~ my cnf),并且找到第一个

热心网友
04.28
如何建立基本医疗保险统筹基金和个人帐户
办公文书
如何建立基本医疗保险统筹基金和个人帐户

基本医疗保险的“双账户”模式:统筹与个人如何分工? 说起咱们的基本医疗保险,它的运作核心可以概括为“社会统筹与个人账户相结合”。简单来说,整个医保基金就像一个大池子,但这个池子被清晰地划分为两个部分:一个是大家共用的“统筹基金”,另一个则是属于参保人自己的“个人账户”。 那么,钱是怎么分别流入这两个

热心网友
04.28
如何定义记录类型_TYPE IS RECORD自定义多字段结构
数据库
如何定义记录类型_TYPE IS RECORD自定义多字段结构

TYPE IS RECORD 语法详解与核心应用指南 在PL SQL数据库编程中,TYPE IS RECORD是定义自定义复合数据类型的关键工具。其标准语法结构为:TYPE 类型名 IS RECORD (字段名 数据类型 [DEFAULT 默认值] [NOT NULL]);。通过该语法,开发者可以灵

热心网友
04.28
参保人可选择几家定点医疗机构
办公文书
参保人可选择几家定点医疗机构

在定点医疗机构的选择上,政策其实给参保人留出了不小的灵活空间。获得定点资格的专科和中医医疗机构,会自动成为统筹区内所有参保人的可选范围,这为大家获取特色医疗服务提供了基础保障。 在此之外,每位参保人还能根据自身需要,再额外挑选3到5家不同层次的医疗机构。比如,你可以选择一家综合三甲医院应对复杂病情,

热心网友
04.28