es6中set和map的区别

news/2024/9/18 23:23:15/ 标签: es6, 前端, ecmascript

在ES6(ECMAScript 2015)中,Set 和 Map 是两种新的集合类型,它们提供了更高级的数据结构来存储唯一值或键值对集合。尽管它们在功能上有些相似,但它们在用途和内部机制上存在一些关键区别。

1. 基本概念

  • Set:一个集合(Set)是一种包含唯一值的数据结构。它的每个元素都是唯一的,没有重复的值。Set 类似于数组,但成员的值都是唯一的,没有重复的值。

  • Map:一个Map对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值)都可以作为一个键或一个值。

2. 主要区别

2.1 存储的数据类型
  • Set:只存储唯一的值(无论是原始值还是对象引用)。
  • Map:存储键值对,键和值都可以是任何类型。
2.2 插入和访问
  • Set:通过 .add() 方法添加新元素,.has() 方法检查元素是否存在,.delete() 方法删除元素,.clear() 方法清空集合。没有直接按索引访问元素的方式,但可以遍历集合。
  • Map:通过 .set(key, value) 方法添加新的键值对,.get(key) 方法根据键获取值,.has(key) 方法检查键是否存在,.delete(key) 方法根据键删除键值对,.clear() 方法清空Map。
2.3 遍历
  • Set 和 Map 都提供了遍历方法,如 .forEach().keys().values() 和 .entries()。但是,由于Map存储的是键值对,所以.entries() 方法对于Map特别有用,因为它返回一个包含每个键值对的数组。
2.4 顺序
  • Set 和 Map 都保持了元素的插入顺序。这意味着,当你遍历它们时,元素将按照被添加到集合中的顺序返回。
2.5 默认值
  • Set 的默认值是 undefined(虽然你通常不会向Set中添加 undefined,因为它被视为唯一值)。
  • Map 的键和值都可以是 undefined,只要它们是唯一的或作为特定的键值对存在。

3. 应用场景

  • Set:适用于需要去重或者需要快速判断某个元素是否存在于集合中的场景。
  • Map:适用于需要存储键值对,并且需要保持键的插入顺序的场景,如实现字典、缓存等。

4. 示例

// Set 示例  
let mySet = new Set();  
mySet.add(1);  
mySet.add(2);  
mySet.add(2); // 重复的值不会被添加  
console.log(mySet.has(2)); // true  // Map 示例  
let myMap = new Map();  
myMap.set('a', 1);  
myMap.set('b', 2);  
console.log(myMap.get('a')); // 1  
console.log(myMap.has('b')); // true

总结,Set 和 Map 在ES6中提供了强大的集合操作能力,它们的主要区别在于存储的数据类型(唯一值 vs 键值对)和相应的操作方法。选择使用哪一个取决于你的具体需求。


http://www.ppmy.cn/news/1527020.html

相关文章

前端框架大观:探索现代Web开发的基石

目录 引言 一、前端框架概述 二、主流前端框架介绍 2.1 React 2.1.1 简介 2.1.2 特点 2.1.3 代码示例 2.2 Vue.js 2.2.1 简介 2.2.2 特点 2.2.3 代码示例 2.3 Angular 2.3.1 简介 2.3.2 特点 2.3.3 代码示例 三、其他前端框架与库 四、前端框架的选择 五、结…

python install 出现443原因

解决办法: pycharm pycharm安装模块时一直提示443 超时问题_pytorch 443-CSDN博客 windows全局 Python代理模式下 解决 pip 安装第三方包时因 SSL 报错Caused by SSLError

Zookeeper工作机制、特点、数据结构、应用场景、配置参数解读

ZK工作机制 从涉及模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,zk就负责通知已在zk上注册的那些观察者做出相应…

【leetcode】树形结构习题

二叉树的前序遍历 返回结果:[‘1’, ‘2’, ‘4’, ‘5’, ‘3’, ‘6’, ‘7’] 144.二叉树的前序遍历 - 迭代算法 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,…

人工智能物联网:一项综述

这篇论文的标题是《Artificial Intelligence of Things: A Survey》,作者是 Shakhrul Iman Siam 等人,来自不同的大学和研究机构。论文提供了对人工智能物联网(AIoT)研究的系统性和全面性回顾。以下是论文的主要内容概述&#xff…

【C#生态园】提高C#开发效率和代码质量的利器:ORM库和数据库连接库

探秘C#数据库利器:全面解读6大库功能与用法 前言 在现代软件开发中,使用合适的库可以极大地提高开发效率和代码质量。针对不同的数据库操作需求,C#开发者常常会选择不同的ORM库和数据库连接库来满足其需求。本文将介绍一些用于C#的主流ORM库…

Win11+Ubuntu20.04双系统安装教程(避坑版)

Win11Ubuntu20.04双系统安装教程(避坑版) 前言系统盘制作安装Rufus系统盘制作 Windows磁盘配置移动分区(磁盘分区时出现不连续的未分配空间需要用到,如果是连续的未分配空间即无需操作)安装分区助手移动分区 安装Ubunt…

adb devices不显示连接设备怎么解决

adb devices不显示设备,首先用老办法检查。假如是显示adb这个命令不认识,那就是系统路径问题。假如能认识adb这个命令,那就检查一下手机有没有开usb调试。 但是我遇到了更奇怪的问题:我把网上的攻略都试了一遍,设备驱…

SVM——支持向量机的学习入门

1、推荐文章 1、一文看懂SVM算法 2、图解机器学习|支持向量机模型详解 3、支持向量机的直观理解 2、分类问题 假设你的大学开设了一门机器学习(ML)课程。课程导师发现数学或统计学好的学生表现最佳。随着时间的推移,积累了一些数据&…

SAP系统使用BRTOOLS的系统COPY

SAP系统使用BRTOOLS的系统COPY 今天偶然翻到的,这个是在之前的公司自己兼职basis摸索的,速度比较快,比标准的system copy好用很多。使用的是SAP系统的BRTOOLS,每次都是成功的,那个NAS有的就是LINUX的一些基本操作,基本都是一样的。 1、ERPRD1服务器使用DB13每天备份到指…

开源 AI 智能名片 S2B2C 商城小程序相关角色的探索

摘要:本文围绕开源 AI 智能名片 S2B2C 商城小程序的决策产品方向,基于两个原则展开研究。原则一是根据该产品方向尽可能多地寻找相关角色,原则二是以探索痛点而非销售为核心。同时确保识别出的角色覆盖价值使用者、价值传递者与价值生产者三类…

基于STM32单片机的LED灯闪烁仿真(库函数版本)

注意事项:STM32仿真会存在各种各样BUG,且尽量按照同样仿真版本使用。本专栏所有的仿真都采用PROTEUS8.15。 本文已经配置好STM32F103C8T6系列,在PROTUES仿真里,32单片机一般只用一种型号,如需其他型号,可改…

精选评测!分享5款AI写论文最好用的软件排名

写作是一项既费时又费力的任务,尤其是对于科研人员来说,撰写论文更是一项必不可少的挑战。幸运的是,现在有多款免费的AI写作工具可以大大简化这一过程。小编精心挑选了5款免费的AI写作工具,旨在帮助大家提高写作效率,让…

YOLOV8实现小目标检测

YOLOV8小目标检测 前言:: yolo版出现很多,基本大同小异 但是这些差异让我们考虑在实验中使用哪个版本会比较好! 在对小目标检测的过程中,yolov7相比yolov8性能更加好。 如果我们还是想使用yolov8,也是可以实…

跨站脚本攻击(XSS)

免责申明 本文仅是用于学习测试自己搭建的XSS注入漏洞使用,请勿用在非法途径上,若将其用于非法目的,所造成的一切后果由您自行承担,产生的一切风险和后果与笔者无关;本文开始前请认真详细学习《‌中华人民共和国网络安全法》‌及其所在国家地区相关法规内容【学法时习之丨…

基于python+django+vue的个性化餐饮管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的视…

【JavaEE初阶】多线程(5 单例模式 \ 阻塞队列)

欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 实例1: 单例模式 饿汉模式 懒汉模式 实例2:阻塞队列 生产者消费者模型 优点 ​编辑 代价 简单实现一个生产者消费者模型 Java标准库中的阻塞队列 ​编辑 模拟实现一…

双线性插值算法

线性插值 已知两个点(x1, y1)、(x2, y2),求它们中间坐标(x,y)。 2点求一条直线公式(双线性插值需要的基础公式),这里没有写成经典的AX+B的形式,因为这种形式从权重的角度更好理解。 经过简单整理成下面的格式: 则可以得到 y = a*y1 + (1-a)*y2 其中a和(1-a)为x距离x1和x…

09年408考研真题解析-计算机网络

[题34]在无噪声情况下,若某通信链路的带宽为3kHz,采用4个相位,每个相位具有4种振幅的QAM调制技术,则该通信链路的最大数据传输速率是(B) A.12 kbps B.24 kbps C.48 kbps D.96 kbps 解析&#xff…

【乐企】基础版本开票代码接口声明

本文是基础版全部代码,包括以下接口: 1、电子发票批量预赋码 2、查询授信额度 3、下载或退回授信额度 4、调整授信额度有效期 5、查询纳税人基本/风险信息 6、查询可用税率 7、查询税收分类编码信息 8、查询差额征税编码 9、数字化电子发票上传 10、查询数字化电子…