JavaScript中解锁Map和Set的力量

🧑‍🎓 个人主页:《爱蹦跶的大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的使用还有任何疑问,欢迎在评论区留言讨论!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

调试器加载错误,从任务栏打开可能会导致该问题 2024/1/8

🧧喜欢将常用软件固定在任务栏的用户肯定很苦恼这个问题 🧧问题复现 🧧这里先查找一下原因 🧧查看一下固定在任务栏的微信小程序开发工具的属性 如果不会打开任务栏图标属性界面的小伙伴请先翻到文章最后 🧧再使用同样…

数据结构与算法教程,数据结构C语言版教程!(第三部分、栈(Stack)和队列(Queue)详解)二

第三部分、栈(Stack)和队列(Queue)详解 栈和队列,严格意义上来说,也属于线性表,因为它们也都用于存储逻辑关系为 "一对一" 的数据,但由于它们比较特殊,因此将其单独作为一章,做重点讲解。 使用栈…

【JVM 基础】 Java 类加载机制

JVM 基础 - Java 类加载机制 类的生命周期类的加载: 查找并加载类的二进制数据连接验证: 确保被加载的类的正确性准备: 为类的静态变量分配内存,并将其初始化为默认值解析: 把类中的符号引用转换为直接引用 初始化使用卸载 类加载器, JVM类加载机制类加载…

「 CodeQL从入门到精通系列 」03.CodeQL常用术语介绍

相比其他代码检测工具,CodeQL中定义了很多专用术语,为了更快上手后续章节,本文对接下来要用到的术语做了统一汇总与解读。 1. 查询语言(QL) QL是一种声明性、面向对象的查询语言,经过优化,可实现对分层数据结构&#…

kafka入门(六):日志分段(LogSegment)

日志分段(LogSegment) Kafka的一个 主题可以分为多个分区。 一个分区可以有一至多个副本,每个副本对应一个日志文件。 每个日志文件对应一个至多个日志分段(LogSegment)。 每个日志分段还可以细分为索引文件、日志存储…

mybatis plus相同Id与xml配置错误时,mybatis plus解决逻辑

前言 处理做项目的问题,其中不乏奇奇怪怪的问题,其中mybatis plus的问题感觉有点隐蔽,有些是运行时出现,有些是运行到具体的逻辑触发,对于应用的状态监控提出了极大的挑战,应用的状态由健康检查接口提供&a…

facebook广告的基础知识与类型

Facebook广告是在Facebook平台上展示的一种数字广告形式,它允许广告主通过定位特定的受众群体来推广他们的产品、服务或品牌。以下是一些关于Facebook广告的基础知识: 支持Facebook广告的卡、556150、532959,点击获取 广告形式: …

【Proteus仿真】【Arduino单片机】智能感应温控风扇

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器,使用LCD1602液晶显示模块、DS18B20温度、按键、声光报警、L293D电机驱动等。 主要功能: 系统运行后,LCD1602显示传感器检…

.NET Framework 与 .NET Core 与 .NET Standard 之间的差异

介绍 在本文中,我们将探讨 .NET Framework、.NET Core 和 .NET Standard 之间的差异。 .NET Framework 与 .NET Core .NET框架.NET核心 历史 .NET Framework 是 .NET 的第一个实现。 .NET Core 是 .NET 的最新实现。 开源 .NET Framework 的某些组件是开源的。 .N…

前端实现搜索功能

最近遇到一个需求,用户在输入框输入关键字之后,点击搜索按钮后进行搜索,如下图,选中的数据在下面,上面展现的是搜索后的数据,现在选中了2条数据: 当用户输入KET后点击搜索,搜出的结果有16条,勾选全选选中后,将选中的16条的数据加到之前已选的2条数据里,于是此时已选…

认识Linux指令之 “ head tail ” 命令

01.head指令 head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾。 语法: head [参数]... [文件]... 功能&#…

SAP CO11N报工批次分割(拆分)

CO11N做报工的时候,下阶料启用了批次,比如需要过账4166个,但是每一批次的库存都不满足4166个,所以需要拆分(分割)处理 这个时候我们就需要对这一行做分割处理 选中这一行,点击‘分割’按钮 弹…

Speech | 语音克隆Openvoice的论文解读及项目实现

本文主要介绍了语音克隆Openvoice的论文以及项目实现~ 论文题目:OpenVoice: Versatile Instant Voice Cloning 论文地址:2312.01479.pdf (arxiv.org) 项目地址:https://github.com/myshell-ai/OpenVoice.git 官网:Home (myshell.a…

C 练习实例23

题目:打印出如下图案(菱形)。 * *** ***** ******* ***** *** * 题目分析: 先打印前4行,因为是递增关系。 第0行:打印3个空格,1个* 第1行:打印2个空格,3个*…

【Github-Action】GithubAction 环境下,如何将临时生成的文件推送至指定分支。

通过这篇文章你可以掌握如何将github action 环境下临时生成的文件推送至指定分支,并且可以打开利用github开放的api做各种强大或有趣的事情的视野和思路。 如果你对github-action感兴趣,还可以看这篇文章, 这篇文章教会你如何开发Github Act…

分布式系统架构设计之分布式消息队列中间件的技术选型报告

1、主流消息队列中间件 01 Kafka 基本原理 Kafka 基于发布-订阅模式,它维护了一个或多个 Topic,生产者将消息发送到 Topic,消费者从 Topic 中读取消息。Kafka 强调高吞吐量,通过批量处理、顺序 I/O 和零拷贝等技术实现高性能 …

微信扫码进入小程序特定页面

小程序配置 开发 - 开发管理 - 开发设置-普通链接二维码打开小程序 配置好的截图 如下:二维码规则建议是自己的域名 /mini/ 功能页面 pages/index/index 是为了方便跳转其他页面 记得把校验文件发给后端 web 端处理 二维码格式为:二维码规则/功能页…

基于 SpringBoot + magic-api + Vue3 + Element Plus + amis3.0 快速开发管理系统

Tansci-Boot 基于 SpringBoot2 magic-api Vue3 Element Plus amis3.0 快速开发管理系统 Tansci-Boot 是一个前后端分离后台管理系统, 前端集成 amis 低代码前端框架,后端集成 magic-api 的接口快速开发框架。包含基础权限、安全认证、以及常用的一…

2024美赛数学建模思路 - 复盘:人力资源安排的最优化模型

文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 描述 …

【深度学习:数据增强】计算机视觉中数据增强的完整指南

【深度学习:数据增强】计算机视觉中数据增强的完整指南 为什么要做数据增强?等等,什么是数据增强?数据增强技术数据增强的注意事项和潜在陷阱什么时候应该做数据增强?类不平衡的数据增强那么我应该选择哪些转换呢&…