当前位置: 首页 > news >正文

js中Map数据结构使用详细讲解

Map 是 JavaScript 中的一种数据结构,它允许我们以键值对的形式存储数据。与普通的 JavaScript 对象相比,Map 对象有一些显著的优势,比如键可以是任何类型的值(包括对象和函数),而不仅仅是字符串或符号。此外,Map 维护键值对的插入顺序,并且其迭代性能更好。

1. 创建一个 Map

const myMap = new Map();

你还可以在创建 Map 的同时,使用一个数组初始化它。这个数组包含一组键值对的数组。

const myMap = new Map([['key1', 'value1'],['key2', 'value2'],['key3', 'value3']
]);

2. 添加元素
使用 set 方法可以向 Map 中添加一个键值对。

myMap.set('key1', 'value1');
myMap.set('key2', 'value2');// 键可以是任何类型的值
const objKey = { id: 1 };
myMap.set(objKey, 'value3');

3. 读取元素
使用 get 方法通过键读取对应的值。

const value1 = myMap.get('key1');
console.log(value1); // 输出: 'value1'const value2 = myMap.get(objKey);
console.log(value2); // 输出: 'value3'

4. 检查键是否存在
使用 has 方法检查 Map 中是否存在某个键。

console.log(myMap.has('key1')); // 输出: true
console.log(myMap.has('key4')); // 输出: false

5. 删除元素
使用 delete 方法可以删除指定的键值对

myMap.delete('key2');
console.log(myMap.has('key2')); // 输出: false

6. 获取 Map 的大小
使用 size 属性可以获取 Map 中键值对的数量。

console.log(myMap.size); // 输出: 2

7. 清空 Map

myMap.clear();
console.log(myMap.size); // 输出: 0

8. 遍历 Map
Map 提供了几种遍历方式,包括 keys()、values()、entries() 方法和 forEach 方法。

  • keys(): 返回一个包含 Map 中所有键的迭代器。
for (const key of myMap.keys()) {console.log(key);
}

获取所有的key的方法:
// 使用 Array.from() 将键迭代器转换为数组
const keysArray = Array.from(myMap.keys());

  • values(): 返回一个包含 Map 中所有值的迭代器。
for (const value of myMap.values()) {console.log(value);
}

获取所有的value的方法:
// 使用 Array.from() 将键迭代器转换为数组
const valuesArray = Array.from(myMap.values());

  • entries(): 返回一个包含 Map 中所有键值对的迭代器。每个键值对表示为 [key, value] 的数组。
for (const [key, value] of myMap.entries()) {console.log(`${key}: ${value}`);
}
  • forEach(): 对 Map 中的每个键值对执行指定的函数。
myMap.forEach((value, key) => {console.log(`${key}: ${value}`);
});

9. Map 与对象的区别

  • 键的类型: Map 的键可以是任何值类型,包括对象、函数和原始类型,而对象的键只能是字符串或符号。

  • 迭代顺序: Map 按照插入顺序迭代键值对,而对象的键顺序可能不保证。

  • 性能: Map 的查找和删除操作在大多数情况下比对象更快,特别是当键不是字符串时。

总结
Map 是一种非常强大的数据结构,适用于需要频繁增删改查操作的场景,尤其是当键类型不是字符串时。与普通对象相比,它提供了更灵活和高效的键值存储方式。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MySQL当表中新增加字段的时候,如何将该字段的值进行快速刷新成对应的值
  • 2024 AI 图像生成器工具合集
  • ssrf漏洞复现分析(1)
  • 网络安全售前入门03——审计类产品了解
  • 出现“此网站无法提供安全的连接,使用了不受支持的协议”的解决方法
  • Apache Doris安装部署
  • Catf1ag CTF Crypto(六)
  • 从零到一,2024年数据恢复软件新手到专家指南
  • MySQL集群技术详解
  • 10天速通Tkinter库——Day7:主菜单及图鉴
  • 【ROS2】launch启动文件:进阶
  • Axure设计之单选框教程(中继器)
  • Clickhouse集群化(六)clickhosue-operator学习
  • 559. N 叉树的最大深度(迭代法)
  • IO--标准函数使用方法
  • [LeetCode] Wiggle Sort
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Centos6.8 使用rpm安装mysql5.7
  • Codepen 每日精选(2018-3-25)
  • Java 23种设计模式 之单例模式 7种实现方式
  • Java方法详解
  • Python学习笔记 字符串拼接
  • SSH 免密登录
  • vue-loader 源码解析系列之 selector
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 基于web的全景—— Pannellum小试
  • 时间复杂度与空间复杂度分析
  • 使用 Docker 部署 Spring Boot项目
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • raise 与 raise ... from 的区别
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​比特币大跌的 2 个原因
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (1)虚拟机的安装与使用,linux系统安装
  • (30)数组元素和与数字和的绝对差
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (过滤器)Filter和(监听器)listener
  • (七)理解angular中的module和injector,即依赖注入
  • (四)事件系统
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • .NET C# 配置 Options
  • .Net FrameWork总结
  • .Net6使用WebSocket与前端进行通信
  • .NET构架之我见
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • @Transactional事务注解内含乾坤?
  • @我的前任是个极品 微博分析
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法