JavaScript中解锁Map和Set的力量

news2024/11/26 2:35:18

🧑‍🎓 个人主页:《爱蹦跶的大A阿》

🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》

​ 

✨ 前言

        ES6带来了Map和Set两个新的数据结构 - 它们分别用于存放键值对和唯一值。Map和Set提供了更优雅和高效的存取与操作数据的方式。本文将全面解析Map和Set的用法及应用场景,助你提升JavaScript数据处理能力。

第一节:Map概述

Map是ES6新增的一种键值对集合,类似于Object。区别在于:

  • Map的键可以是任意类型,Object的键只能是字符串或符号。
  • Map的大小可以直接获取,Object则需手动计算。
  • Map有更多方便的方法,如size、clear等。

Map提供了对键值对的存储与操作,键的顺序也得到保留。

第二节:创建和初始化Map

可以通过构造函数创建Map:

let map = new Map();

Map可以接受数组做为参数,进行初始化:

new Map([
  ['key1', 'val1'],
  ['key2', 'val2'], 
]);

 也可以链式调用set方法初始化:

new Map()
  .set('a', 1)
  .set('b', 2);

第三节:Map的基本操作

  • set(key, val) 添加元素
  • get(key) 通过键查找值
  • has(key) 判断键是否存在
  • delete(key) 通过键删除元素
  • clear() 清空所有元素

Map使键值对的操作更简洁直观。后面将介绍Map的遍历等高级用法。

 

第四节:遍历Map

常用的Map遍历方式:

  • keys() - 遍历键名
  • values() - 遍历键值
  • entries() - 遍历键值对
  • forEach() - 遍历回调函数

示例:

let map = new Map([[1, 'a'], [2, 'b']]);

for (let key of map.keys()) {
  // ...
}

for (let value of map.values()) {
  // ...
}

for (let [key, value] of map.entries()) {
  // ...
}

map.forEach(function(value, key) {
  // ...
})

第五节:WeakMap

WeakMap与Map的区别:

  • WeakMap只接受对象作为键名
  • WeakMap的键名所指向的对象不计入GC ROOT
  • WeakMap不可遍历

WeakMap使用场景:

  • 作为对象的元数据储存
  • 缓存数据

第六节:Set的概述

Set是一种包含唯一值的集合,可以高效地对值进行操作。

Set具有以下特点:

  • 成员值唯一,没有重复值
  • 值的顺序不重要,也不能索引
  • 支持高效的查找、删除操作

第七节:创建和初始化Set

可以通过构造函数创建Set:

let set = new Set();

也可以传入数组或者iterable对象进行初始化: 

new Set([1, 2, 3]);

new Set('hello');

第八节:Set的基本操作

  • add(value) 添加元素
  • delete(value) 删除元素
  • has(value) 检查是否存在
  • clear() 清空所有元素

Set使得处理唯一值更简单。

第九节:遍历Set

  • keys() 返回键名的迭代器
  • values() 返回键值的迭代器
  • entries() 返回键值对的迭代器
  • forEach() 遍历回调函数

示例:

 

let set = new Set([1, 2]);

for (let key of set.keys()) {
  // ...
}

for (let value of set.values()) {
  // ... 
}

set.forEach(function(value) {
  // ...
})

第十节:WeakSet

WeakSet与Set的区别:

  • 只接受对象作为成员
  • 对象不计入垃圾回收机制中
  • 不可遍历

使用场景:存储DOM节点,不会泄漏内存。

Map和Set大大提高了数据处理能力,了解其用法可以使代码更简洁优雅。

 

第十一节:Map的应用

  • 作为对象的替代,当键需要非字符串时
const map = new Map();
map.set(obj, value);
  • 存储键值对数据集合
  • 映射关系表
  • 频率表记录出现次数
  • 缓存数据

第十二节:Set的应用

  • 去重数组
const set = new Set(arr);
  • 交集、并集、差集运算
  • 删除数组重复值
[...new Set(arr)]
  • 测试值是否存在于某集合
  • 存储不重复数据,如Tags

Map和Set拓展了数据处理能力,在数据操作方面有很多实际应用,值得我们深入学习。

✨ 结语

  • Map用于存储键值对,键可以是任意类型。
  • Set用于存储唯一值,没有重复值。
  • Map和Set都可以高效地增删查找。
  • Map支持按插入顺序遍历,Set不保证顺序。
  • WeakMap和WeakSet用于存储对对象的弱引用。
  • Map和Set在处理数据时有许多应用场景。

要点:

  • 理解Map与Object、Set与Array的区别
  • 掌握各自的初始化、增删查API
  • 合理运用Map或Set,不要滥用
  • WeakMap和WeakSet用于特定场景
  • 多在实际中练习 Map和Set的应用

        Map和Set提供了更优雅高效的 JavaScript 数据处理能力,值得我们深入学习,并合理运用到实际项目中。

        这就是本文的全部内容了。如果对Map和Set的使用还有任何疑问,欢迎在评论区留言讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1449222.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第十九篇【传奇开心果系列】Python的OpenCV库技术点案例示例:文字识别与OCR

传奇开心果短博文系列 系列短博文目录Python的OpenCV库技术点案例示例系列 短博文目录前言一、OpenCV 文字识别介绍二、图像预处理示例代码三、文字区域检测示例代码四、文字识别示例代码五、文字后处理示例代码六、OpenCV结合Tesseract OCR库实现文字识别示例代码七、OpenCV结…

PHP+vue+mysql校园学生社团管理系统574cc

运行环境:phpstudy/wamp/xammp等 开发语言:php 后端框架:Thinkphp 前端框架:vue.js 服务器:apache 数据库:mysql 数据库工具:Navicat/phpmyadmin 前台功能: 首页:展示社团信息和活动…

COM初体验——新建文档并写入内容。

我想在程序里和Word交互。老师跟我说不要学COM,因为它已经过时了。但是我不想再把代码移植到C#上面,然后用VSTO——已经用了std::unordered_set!因为我使用了Copilot,结合我的思考,写了下面的代码: #impor…

JavaWeb学习|JSON与AJAX

学习材料声明 所有知识点都来自互联网,进行总结和梳理,侵权必删。 引用来源:尚硅谷最新版JavaWeb全套教程,java web零基础入门完整版 JSON JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机…

山西电力市场日前价格预测【2024-02-10】

日前价格预测 预测说明: 如上图所示,预测明日(2024-02-10)山西电力市场全天平均日前电价为126.73元/MWh。其中,最高日前电价为302.95元/MWh,预计出现在08:15。最低日前电价为0.00元/MWh,预计出…

SolidWorks:创建实体的扇形分割

没找到如何创建扇形分割,自己想了个办法,硬把它分割开了。

新手必看,零基础打造AI数字人,HeyGen完全操作指南

一、HeyGen注册登录教程 1.1 登录HeyGen官网 步骤1:访问官网 在您的浏览器中输入HeyGen官网地址,点击链接进入官网。这是进入HeyGen世界的第一步,一个简洁而直观的界面将会迎接您。 步骤2:点击试用按钮 在首页中,…

Mermaid绘制UML图教程

Mermaid 是一种轻量级的图形描述语言,用于绘制流程图、时序图、甘特图等各种图表。它采用简单的文本语法,使得用户能够快速绘制各种复杂图表,而无需深入学习图形绘制工具。 一、安装Mermaid Mermaid 可以在浏览器中直接使用,也可…

Linux用户常用命令——Linux命令(一)

大家好,从这篇文章开始我将开始进行Linux常用命令的学习,本专栏的每一个知识点我都会尽量在Linux系统中手操实现一遍。如果在读这篇文章的你也想熟悉Linux常用操作命令,我非常推荐你也搭个Linux系统进行实操学习。因为Linux常用的命令的知识点…

Python面向对象学习小记——基本概念

在Python中,int类型、float类型、列表类型、布尔类型等等,都是对象类型。

Linux日志管理服务 rsyslogd

文章目录 1. 基本介绍2. 系统常用的日志3. 日志管理服务 rsyslogd 1. 基本介绍 日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。日志对于安全来说…

【MATLAB】鲸鱼算法优化混合核极限学习机(WOA-HKELM)回归预测算法

有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 鲸鱼算法优化混合核极限学习机(WOA-HKELM)回归预测算法是一种结合鲸鱼优化算法和混合核极限学习机的混合算法。其原理主要包含以下几个步骤: 初始化&am…

【计算机网络】网际协议——互联网中的转发和编址

编址和转发是IP协议的重要组件 就像这个图所示,网络层有三个主要组件:IP协议,ICMP协议,路由选择协议IPV4 没有选项的时候是20字节 版本(号):4比特:规定了IP协议是4还是6首部长度&am…

[python] 罗技动态链接驱动库DLL 控制 键鼠

[python] 罗技动态链接驱动库DLL 控制 键鼠 最近在玩搬砖游戏晶核, 每天有很多重复繁琐的"打卡"操作, 得知隔壁御三家游戏就有大佬做了自动收割的辅助工具,我就想模仿写一个.不过大佬们写的开源工具厉害得多,加了神经网络自动识别,实现寻路和点击功能.我目前最多就是…

Hive的相关概念——架构、数据存储、读写文件机制

目录 一、架构及组件介绍 1.1 Hive整体架构 1.2 Hive组件 1.3 Hive数据模型(Data Model) 1.3.1 Databases 1.3.2 Tables 1.3.3 Partitions 1.3.4 Buckets 二、Hive读写文件机制 2.1 SerDe 作用 2.2 Hive读写文件流程 2.2.1 读取文件的过程 …

【计算机是如何工作的】让你快速简单理解CPU核心工作机制,打破计算机的神秘感

计算机是如何⼯作的 🌲计算机发展史🌲冯诺依曼体系(Von Neumann Architecture)🌲CPU 基本⼯作流程🍓逻辑⻔🍓⻔电路(Gate Circuit)🍓算术逻辑单元 ALU(Arithmetic & …

算法沉淀——队列+宽度优先搜索(BFS)(leetcode真题剖析)

算法沉淀——队列宽度优先搜索(BFS) 01.N 叉树的层序遍历02.二叉树的锯齿形层序遍历03.二叉树最大宽度04.在每个树行中找最大值 队列 宽度优先搜索算法(Queue BFS)是一种常用于图的遍历的算法,特别适用于求解最短路径…

【python学习篇1】python基本语法

目录 一、第一个python程序 二、基本语法,数据类型,字面量,循环语句等内容 2.1字面量 2.2注释 2.2.1单行注释 2.2.2多行注释 2.3变量 2.3.1认识变量 2.3.2查看数据类型 2.3.3数据类型转换 2.3.4字符串的三种定义方式 2.3.5字符串…

Unicode编码的魅力:跨语言交流的桥梁

title: Unicode编码的魅力:跨语言交流的桥梁 date: 2024/2/15 14:04:00 updated: 2024/2/15 14:04:00 tags: Unicode编码跨语言多语言支持存储开销兼容性文本处理全球化软件 引言: Unicode编码是一种用于表示世界上所有字符的标准编码方式。它解决了字…

【机器学习】合成少数过采样技术 (SMOTE)处理不平衡数据(附代码)

1、简介 不平衡数据集是机器学习和人工智能中普遍存在的挑战。当一个类别中的样本数量明显超过另一类别时,机器学习模型往往会偏向大多数类别,从而导致性能不佳。 合成少数过采样技术 (SMOTE) 已成为解决数据不平衡问题的强大且广泛采用的解决方案。 …