JavaScript中Map迭代方法keys与values及entries

3次阅读

Map 的 keys()、values()、entries()均返回按插入顺序遍历的懒执行迭代器,分别产出键、值、[键, 值]数组;不可重用,不响应创建后的 Map 修改,且无 forEach 方法。

JavaScript 中 Map 迭代方法 keys 与 values 及 entries

JavaScript 中 Map 对象的 keys()values()entries()方法,都返回迭代器(Iterator),用于遍历 Map 中的键、值或键值对。它们不返回数组,而是可迭代对象,需配合 for……of、扩展运算符或Array.from() 等使用。

keys():只获取所有键

keys()返回一个迭代器,按插入顺序依次产出 Map 中每个键。键可以是任意类型(字符串、数字、对象、Symbol 等)。

常见用法:

  • for……of 循环遍历:
      for (const key of myMap.keys()) {console.log(key); }
  • 转成数组:
      const keyArray = Array.from(myMap.keys());
  • 解构或展开:
      const keys = […myMap.keys()];

values():只获取所有值

values()返回一个迭代器,按插入顺序依次产出 Map 中每个对应值。值同样支持任意类型,且允许重复。

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

注意点:

  • 即使值是引用类型(如对象),values()返回的是原值的引用,不是副本。
  • 无法通过值反查键,Map 本身不提供“值→键”的查找接口。
  • 常用转换方式:
      const vals = Array.from(myMap.values());

entries():同时获取键值对

entries()是 Map 默认的迭代方法(myMap[Symbol.iterator] === myMap.entries),返回键值对数组 [key, value] 组成的迭代器。

典型使用场景:

  • 配合 for……of 解构:
      for (const [key, value] of myMap.entries()) {/* 使用 key 和 value */}
  • 转为二维数组:
      const pairs = […myMap.entries()]; // [[k1,v1], [k2,v2]]
  • 构造新 Map(浅拷贝):
      const copy = new Map(myMap.entries());

三者共性与注意事项

它们都遵循 Map 的插入顺序,且返回的迭代器是“懒执行”的——不立即计算全部结果,每次调用 next() 才产出下一个项。

关键细节:

  • 迭代器不可重用:一旦遍历完成或中途 break,再次遍历时需重新调用 keys() 等获取新迭代器。
  • 不响应后续增删:迭代器创建后,对 Map 的修改(如 set()delete())不会影响已生成的迭代器行为(但会影响后续调用next() 的结果,取决于具体时机)。
  • 不能直接用 .forEach():这些方法返回的是迭代器,不是数组,没有forEach 方法;如需类似逻辑,可用 for……of 或先转数组。
星耀云
版权声明:本站原创文章,由 星耀云 2026-03-22发表,共计1200字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources