Map对象在JavaScript循环中的使用

在JavaScript中,Map对象是一种新的键值对集合数据结构,与传统的Object有着本质的差异。一个Map的键可以是任意值,包括函数、对象或任何原始值。Map对象与传统的Object相比,有以下几个显著的优点:

  • 键的范围不限于字符串和Symbol。
  • Map对象的键值对是有序的,即键值对的插入顺序是如何,迭代顺序就是如何。
  • Map 的大小可以通过 size 属性轻松获取,而不是像Object那样必须手动计算。
  • Map 是可迭代的,可以直接使用 for...of 循环进行迭代。
  • Map 进行迭代效率比Object的迭代(例如,使用 Object.keys 或者 Object.entries)要来得高。

在JavaScript中进行循环操作时,使用Map对象,你可以采用多种方式进行迭代,它们分别有着不同的用途和语法结构。

for...of 循环

for...of 循环直接迭代Map中的键值对,它返回每个项的key, value数组。

复制代码
let myMap = new Map();
myMap.set('key1', 'value1');
myMap.set('key2', 'value2');

for (let [key, value] of myMap) {
  console.log(key, value);
}
​

forEach() 方法

Map对象的 forEach() 方法类似于数组的 forEach() 方法,它按照插入顺序迭代每个键值对,并执行提供的回调函数。

复制代码
myMap.forEach((value, key) => {
  console.log(key, value);
});
​

迭代器方法

Map对象提供了三个迭代器方法:keys()values()entries()。这些方法返回新的迭代器对象,你可以用 for...of 循环或者其他迭代器协议的方法来遍历。

  • keys() 迭代Map中的键。

  • values() 迭代Map中的值。

  • entries() 迭代Map中的项即键值对。

    for (let key of myMap.keys()) {
    console.log(key);
    }

    for (let value of myMap.values()) {
    console.log(value);
    }

    for (let [key, value] of myMap.entries()) {
    console.log(key, value);
    }

使用展开运算符

你还可以通过展开运算符 ... 去将Map对象的 keysvalues、或 entries 迭代器转换成数组。

复制代码
console.log([...myMap.keys()]);   // 输出所有的键
console.log([...myMap.values()]); // 输出所有的值
console.log([...myMap.entries()]); // 输出所有的键值对
​

由于Map对象跟传统的对象类似,但提供了更多的迭代功能,它被广泛用来代替Object存储键值对。适当的使用Map和配套的迭代方法,可以让代码更加清晰,提高数据操作的灵活性和效率。在数据量大或者对迭代顺序有特定需求时,Map会是一个很好的选择。

相关推荐
meilindehuzi_a1 小时前
从零理解并实现 RAG:用 LangChain.js 构建语义检索问答系统
开发语言·javascript·langchain
风流 少年1 小时前
Julia
开发语言·julia
江畔柳前堤2 小时前
GO01-Go 语言与主流编程语言深度对比
开发语言·人工智能·后端·微服务·云原生·golang·go
世界哪有真情2 小时前
拿人类意识卡 AI?等于用 bug 验收正式产品
前端·人工智能·后端
:-)2 小时前
算法-归并排序
java·开发语言·数据结构·算法·排序算法
鱼樱前端3 小时前
别再自己拼凑了!这款 Vue 3.5+ 严肃产品级组件库,把 AI 对话、工作流和复杂数据全包了!
javascript·vue.js·github
Listen·Rain3 小时前
Vue3:setup详解
前端·javascript·vue.js
GIS阵地3 小时前
QgsRasterDataProvider 完整详解(QGIS 3.40.13 C++)
开发语言·c++·qt·开源软件·qgis
Patrick_Wilson4 小时前
修好 bug 只是开始:一次由监控需求反向重构日志结构的复盘
前端·监控·数据可视化
yaoxin5211234 小时前
462. Java 反射 - 获取声明类与封闭类
java·开发语言·python