游乐游手机版
首页/前端开发/文章详情

JavaScript数组keys、values、entries迭代器方法详解

时间:2026-07-23 20:36
JavaScript数组的keys()、values()和entries()方法返回惰性迭代器,分别产出索引、元素值和键值对。迭代器只能单次遍历,需通过Array from()或扩展运算符转为数组后才能链式调用,适合按需遍历以节省内存。

在 JavaScript 开发中,数组的 keys()values()entries() 方法均为**惰性迭代器(Iterator)**,而非普通数组。这意味着它们不会立即执行计算,也不会自动转换为数组,而是按插入顺序逐个产出数据。这种设计非常适合按需遍历、节省内存,尤其在处理大型数组或需要精细控制循环流程时,优势十分突出。

Ja vaScript 数组 keys values entries 迭代器用法

keys():只遍历索引

该方法返回一个产出数组索引(0, 1, 2…)的迭代器。适用于只需位置信息的场景,例如批量设置 DOM 属性、生成序号,或进行与索引相关的逻辑判断。

  • 直接使用 for...offor (const i of arr.keys()) { console.log(i); }
  • 转为数组后再操作:Array.from(arr.keys()).filter(i => i % 2 === 0)(筛选偶数索引)
  • 注意:在稀疏数组中,keys() 仍然会产出所有索引(包括空位对应的索引),不会跳过空缺

values():专注元素值本身

返回一个产出数组每个元素值的迭代器。它避免了手动通过索引取值(arr[i]),语义更清晰,且返回的是原值的引用(对象/函数类型保持不变)。

  • 结合 for...of 进行渲染或校验:for (const val of arr.values()) { if (!val) throw new Error("空值不允许"); }
  • 转为数组后统计:const sum = Array.from(arr.values()).reduce((a, b) => a + b, 0)
  • 无法反查索引——迭代器只提供值,不带位置信息

entries():同时拿到索引和值

返回键值对 [index, element] 的迭代器,这也是数组默认的迭代方式(arr[Symbol.iterator] === arr.entries())。非常适合需要“边读边改”或进行结构化处理的场景。

  • 解构遍历最常用:for (const [i, val] of arr.entries()) { console.log(`${i}: ${val}`); }
  • 转为数组便于后续映射:Array.from(arr.entries()).map(([i, v]) => ({ id: i, data: v }))
  • 比分别调用 keys()values() 更高效——一次遍历完成配对,避免两次独立迭代造成顺序不一致的风险

通用注意事项

三者返回的都是单次可用的惰性迭代器,不具备数组方法(如 mapfilterlength),且不能重复使用:

  • 已遍历完的迭代器再次调用 next() 始终返回 { done: true }
  • 如需多次使用,必须重新调用 arr.keys() 等获取新迭代器
  • 若需要链式操作,先用 Array.from() 或扩展运算符转为数组:[...arr.values()]
  • 浏览器兼容性良好(Chrome 66+、Firefox 60+、Safari 12.1+),IE 不支持
来源:https://www.php.cn/faq/2802078.html
上一篇CSS兼容深色模式的平滑主题颜色切换 下一篇如何利用CSS变量构建可定制主题色拾取器教程
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
JavaScript数组字面量与构造函数创建稀疏数组的差异
前端开发 · 2026-07-25

JavaScript数组字面量与构造函数创建稀疏数组的差异

数组字面量创建稠密数组,空位默认为undefined;Array()构造函数传入单个数字参数会生成稀疏数组,索引不存在且遍历方法跳过,多参数或非数字参数则行为与字面量一致。初始化稠密数组应使用Array from或fill。

如何优化Bootstrap按钮的焦点状态环CSS样式方法详解
前端开发 · 2026-07-25

如何优化Bootstrap按钮的焦点状态环CSS样式方法详解

Bootstrap按钮焦点样式优化需将内阴影改为外发光,覆盖所有焦点选择器避免原生蓝边闪烁。使用:focus-visible区分键盘与鼠标交互,同时处理按钮组圆角、父容器溢出及浏览器兼容性,确保焦点反馈清晰且符合无障碍标准。

Less中强制转换CSS单位适配不同移动端方案详解
前端开发 · 2026-07-25

Less中强制转换CSS单位适配不同移动端方案详解

Less单位转换需手动完成:用unit()剥离单位,通过变量控制基准值,再拼接目标单位。px2rem函数须区分输入类型(纯数字、带px单位等),基准值@base-font-size需全局定义且不可在媒体查询中重定义。所有运算发生在编译期,适配需提前编译多套CSS文件。

Vue 插件开发与使用完整指南
前端开发 · 2026-07-25

Vue 插件开发与使用完整指南

Vue插件通过install方法为应用注入全局属性、组件、指令、混入和provide等扩展能力,注册时机须在createApp之后、mount之前。插件支持对象或函数形式,使用app use()注册。开发时需注意命名冲突、配置默认值及错误处理,确保工程健壮性。

CSS响应式视频全屏黑边排版问题解决方案
前端开发 · 2026-07-25

CSS响应式视频全屏黑边排版问题解决方案

CSS响应式视频全屏黑边源于盒子模型、定位与加载策略缺失。需重置body边距及溢出,父容器用position:fixed与100dvh,video设为block+object-fit:cover。autoplay需加muted、playsinline。移动端用100dvh防地址栏抖动,低端机分辨率不超1倍。