ES6之Map和Set有什么不同?

2023-11-19

一、Map

1.定义

Map是ES6提供的一种新的数据结构,它是键值对的集合,类似于对象,但是键的范围不限于字符串,各种类型的值都可以当做键。

Object结构是“字符串-值”的对应,Map结构则是“值-值”的对应 

 2.代码示例

Map本身是一个构造函数,先来生成一个Map数据结构,从打印的结果就可以看出,Map实例有以下属性和方法:

size、set()、get()、has()、delete()、clear()、keys()、values()、entries()、forEach()

const map = new Map()
console.log(map, 'newMap');

2.1存储数据 set()

格式为set(key,value),如果key对应的value已经有值,就会被更新;没有值就存储新的“键-值”对,并且key可以是任何数据类型。

	// 1.1 key为string
    map.set('test', 1)
    // 1.2 key 为number
	map.set(999, '数字')
	// 1.3 key 为function
    const temp = function() {}
	map.set(temp, '这是函数')
	// 1.4 key 为undefined
	map.set(undefined, '这是undefined')
    // 1.5 key 为null
	map.set(null, '这是null')
	// 1.6 key 为boolean
	map.set(false, '假')
	// 1.7 链式写法
	map.set('测试', '测试value').set(2, 22222222).set(true, '真')

2.2获取数据 get()

格式为get(key),但不能使用链式写法,会报错

  // 打印出来看结果--->与上面存储的数据一一对应
  console.log(map.get('test'));
  console.log(map.get(999));
  console.log(map.get(temp));
  console.log(map.get(undefined));
  console.log(map.get(null));
  console.log(map.get(false));
  console.log(map.get('测试'));
  console.log(map.get(2));
  console.log(map.get(true));

2.3 查看map中的成员总数 size属性

返回值为number

	console.log(map.size); // 9

2.4判断某个key(键)是否在Map中 has()

返回值为number

	console.log(map.has('test'), '是否存在test');
	console.log(map.has('test1'), '是否存在test1');

2.5删除某个key(键) delete()

返回值为bollean 删除成功true,删除失败false

	console.log(map.delete('test'), '是否删除成功'); // true

2.6清除所有成员 clear()

没有返回值

	map.clear()
	console.log(map, '所有map');

2.7遍历方法:keys()、values()、entries()、forEach()

	// 7.1 返回键名的遍历器->keys()
	for (let key of map.keys()) {
		console.log(key, 'key');
	}

	// 7.2 返回键值的遍历器->values()
	for (let value of map.values()) {
		console.log(value, 'value');
	}

	// 7.3 返回所有成员的遍历器->entries()
	for (let item of map.entries()) {
		console.log(item, 'item为数组');
	}

	// 7.4 遍历Map的所有成员->forEach()
	map.forEach(function(value, key, map) {
		console.log(value, key, 'value + key');
		console.log(map, 'map中的所有成员');
	})

二、Set

1.定义

Set是Es6提供的一种新的数据结构,它类似于数组,又不同数组,因为它成员的值都是唯一的。

利用Set值唯一的特性,Set可以用来做数组去重,并且Set中的值会自动排序

2.代码示例

Set本身也是一个构造函数,先来生成一个Set数据结构,从打印的结果就可以看出,Set实例有以下属性和方法:

size、add()、has()、delete()、clear()、keys()、values()、entries()、forEach()

	const set = new Set()

2.1存储数据 add()

格式为add(value) ;返回值为Set本身,可以使用链式写法;但由于set中的值唯一,重复添加会被直接过滤

	set.add(0).add(1).add(1).add(2).add(2)
	console.log(set.add(0).add(1).add(1).add(2).add(2).add(3));

2.2判断某个值是否在Set中has()

返回值为bollean

	console.log(set.has(0)); // true
	console.log(set.has(99)); // false

2.3删除数据 delete()

返回值为bollean 删除成功true,删除失败false

	console.log(set.delete(0), '是否删除成功');
	console.log(set, '删除后数据');

2.4清除所有成员 clear()

没有返回值

	set.clear()
	console.log(set, '清除后的set');

2.5遍历方法:keys()、values()、entries()、forEach()

	// 5.1 返回键名的遍历器->keys()
	for (let key of set.keys()) {
		console.log(key, 'key');
	}

	// 5.2 返回值的遍历器->values()
	for (let value of set.values()) {
		console.log(value, 'value');
	}

	// 5.3 返回遍历器->entries()
	for (let item of set.entries()) {
		console.log(item, 'item为数组');
	}

	// 5.4 遍历Map的所有成员->forEach()
	set.forEach(function(value, key, set) {
		console.log(value, key, 'forEach');
		console.log(set, 'set中的所有成员');
	})

三、Set和Map的对比

1.相同点:

都可以通过for... of进行遍历

2.不同点:

1.定义:

Set是Es6提供的一种新的数据结构,它类似于数组,又不同数组,因为它成员的值都是唯一的。
Map也是Es6提供的一种新的数据结构,它是键值对的集合,类似于对象,但是键的范围不限于字符串,各种类型的值都可以当做键。也就是说,Object结构是“字符串—值”的对应,Map结构则是“值—值”的对应。

2.Map可以通过get方法获取值,但Set不可以,因为Set只有值

3.利用Set值唯一的特性,Set可以用来做数组去重,并且Set中的值会自动排序;Map没有格式限制,可以用来做数据存储

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ES6之Map和Set有什么不同? 的相关文章

  • 在 onclick 事件上请求麦克风

    有一天 我偶然发现了这个 Javascript 录音机的例子 http webaudiodemos appspot com AudioRecorder index html http webaudiodemos appspot com Au
  • 如何使用 JavaScript 刷新页面?

    如何使用 JavaScript 刷新页面 Use location reload https developer mozilla org en US docs Web API Location reload 例如 每当元素带有以下内容时重新
  • 在 JavaScript 函数中加载图像

    我有获取图像像素颜色的功能 function getImage imgsrc var img img src imgsrc var imageMap new Object img load function var canvas
  • 有什么方法可以复制 div 的渲染 HTML 吗?

    我正在开发电子邮件签名生成器 我想通过按按钮复制最终签名 而不是手动选择签名并将其复制到剪贴板 这意味着我需要它们的图像 文本和样式 我尝试了几种变体 包括 w3schools 的变体 但没有成功 其中一些只是复制文本 但没有样式 例子 h
  • jQuery 可以操作插入的元素吗?

    我是 jQuery 的新手 我认为 jQuery 可以操作由代码添加的元素是合理的 但我发现现在还不能 function addVideo click function publisher append div div
  • 如何在 google.maps.event.addListener 中使用它

    以下示例有效 但是当我尝试传递参数并使用this在该功能不起作用 Working google maps event addListener markers i click showInfoWindow function showInfoW
  • jQuery UI Datepicker 奇怪的行为

    我在使用 jqueryUI 使用简单的日期选择器时遇到了一个奇怪的问题 我只想显示两个月的日历 包括上个月和当前月份 我使用了这段代码 function picker datepicker numberOfMonths 2 showCurr
  • 从对象中取出具有无效(NaN、空白等)值的键的最佳方法?

    我有一个供用户填写的简短搜索表单 将有多个搜索查询进入 MongoDB 该表单创建一个名为的变量searchParams可能看起来像这样 var searchParams city Springfield bedrooms 3 bathro
  • Pjax动画

    我终于让 pjax 工作了 但我还有另一个问题 如何添加一些 jquery 动画 如淡出 幻灯片旧内容和淡入 幻灯片新内容 默认情况下 pjax 只是更改内容 没有任何好看的效果 任何帮助将非常感激 此致 基本上 你有一堆事件 https
  • fadeOut() 和slideUp() 同时进行?

    我已经发现jQuery 淡出然后滑动 https stackoverflow com questions 734554 jquery fadeout then slideup这很好 但不是那个 我怎么能够fadeOut and slideU
  • 如何在 JavaScript 中将变量的内容写入文件[重复]

    这个问题在这里已经有答案了 可能的重复 firefox 如何启用本地 JavaScript 来读取 写入我的 PC 上的文件 https stackoverflow com questions 2846045 firefox how to
  • Socket IO 服务器到服务器

    服务器是否可以使用 Socket IO 连接到另一个服务器并被视为客户端 并让它加入房间 接收 io sockets in lobby emit 和更多 第一个服务器也在监听连接 消息 嘿 Brad 下面是我的完整 js 应用程序 供参考
  • AngularStrap 工具提示禁用我的自定义指令

    我正在尝试让 bs tooltip AngularStrap 指令与我自己的名为 checkStrength 的自定义指令一起使用 该指令检查密码的强度 单独使用这些指令中的任何一个时 它们都可以正常工作 但不能一起工作 This http
  • Angularjs : $locationProvider.hashPrefix("!") ;

    我想将网址显示为 www test com 因为我正在使用 locationProvider hashPrefix 但它显示网址为 www test com 我想 哈希之前而不是哈希之后 Thanks var app angular mod
  • 如何使用 jQuery 单击特定链接时打开引导导航选项卡的特定选项卡?

    我是 jquery 和 bootstrap 的新手 所以请考虑我的错误 我已经创建了一个用于登录和注册的 bootstrap 模式 它包含两个导航选项卡 称为登录和注册 我有两个按钮可以弹出相同的模态窗口 但在模态窗口内显示不同的选项卡 每
  • 绘制多边形

    我正在使用 Google Maps API V3 根据路径绘制多边形 该路径是随机未排序坐标点 LatLng 的数组 这会产生以下形状 Polylines intersect Problem 由于多边形的形状取决于路径中点的顺序 因此如何对
  • Vue-Router 抽象父路由

    我正在尝试将当前网站迁移到 vuejs 站点地图必须是 login signup password reset browse search dozens of other routes 由于其中一些路线共享大量 fx 因此我将它们设为父路线
  • Chrome 调试器注入 javascript

    我有这样的好奇心 是否可以以某种方式在我的页面中注入 javascript 并执行它并调试它 正如您在控制台中所做的那样 但在控制台中您无法暂停并观察变量 是否可以调试我通过控制台输入的代码 为什么无法调试通过 XHR 接收的代码 Than
  • 区分 NaN 输入和输入类型为“number”的空输入

    我想使用 type number 的表单输入 并且只允许输入数字
  • $ 在 JQuery 中意味着什么

    在下面的 var obj one 1 two 2 three 3 four 4 five 5 each obj function i val console log val 这里是什么意思 是对象吗 是一个别名jQuery对象 函数 它充当

随机推荐

  • docker安装nginx太多坑了,果断放弃

    以下是我本人的个人看法 如有不对可在评论区讨论交流 1 listen的端口受限于docker p的参数 一个nginx容器conf文件只能listen同一个端口 2 修改配置文件麻烦 还有docker exec进入到容器内部进行操作 当然
  • 医疗保健软件必备指南

    对许多人来说 软件可能是一种奢侈品 只会给生活在 21 世纪的人们带来一些额外好处 但有时 软件可能是救命稻草 起着生死攸关的作用 根据医疗行业的部分统计数据 我们清醒地发现 美国平均每年约有 25 万至 40 万患者死于本可预防的医疗差错
  • Qt队列的使用

    一 queue 队列 队列是一种先进先出的数据结构 是一个模板类 队列和栈是一种数据逻辑概念 即数据能进行的操作 主要区别是 队列先进先出 First In First Out 栈后进先出 链表和顺序表是一种数据存放方式 主要区别是 链表有
  • 向日葵远程连接Ubuntu出现 “连接中断“ 的解决方法

    向日葵远程连接Ubuntu出现 连接中断 的解决方法 https www cnblogs com wangling1820 p 13448397 html 方法一 参考博客1 https blog csdn net wzf20162016
  • styled-components 的用法

    用于给标签或组件添加样式 给标签或组件添加样式 import styled from styled components styled button 给button标签添加样式 const Button styled button back
  • opencv中归一化函数cv2.normalize()的原理讲解

    本篇文章参考博客 https blog csdn net kuweicai article details 78988886 功能 归一化函数 参数 Python cv2 normalize src dst alpha beta norm
  • 转:在内核里写i2c client 驱动的两种方式

    原文位置 https www cnblogs com simonshi archive 2011 02 24 1963426 html 在内核里写i2c client 驱动的两种方式 前文介 绍了利用 dev i2c 0在应用层完成对i2c
  • 局域网下ROS多机通信的网络连接配置

    1 在路由器设置中固定各机器IP地址 在浏览器中输入路由器的IP地址 例如TP LINK路由器的IP为 192 168 1 1 进入登录页面后 输入用户名和密码登录 用户名一般为admin 密码为自定义 在 基本设置 gt LAN设置 gt
  • WebRTC 之点对点连接——浏览器

    WebRTC 的精髓 点对点连接 上一篇文章中 主要讲了浏览器怎样获取用户设备上的视频流 并且显示在 HTML5
  • java以base64文件格式导出excel表格

    在项目中要求查询数据库并且用base64文件流的格式返回excel表格 自己试了好几种方法 最后找到的答案 错误方式 用HSSFWorkbook直接生成相对应的文件 然后用base64转化 这种解析出来的文件是打不开的 String enc
  • 上海万应云——大数据精准招商系统

    上海万应云数字科技有限公司 基于全国企业大数据与企业特有的经营数据 进行动态分析与整合 形成如下几个业务领域 1 针对地方政府 产业园 形成产业政策分析 产业链路图谱 区域经济报告 高潜企业挖掘 全面把握当地的产业经济状况 投融资实际落地情
  • [JAVA]将Set转换成int[]数组

    今天在写练习的时候 碰到了方法的返回值为int 可我却使用的是HashSet来实现 想return发现类型对不上的问题 于是尝试了toArray方法 但toArray方法返回的是Object类或者是一个包装类 就找到了这个set转换成int
  • 动态一键换肤实现思路和demo

    前言 浏览器切换样式无非是通过css 总共有以下三种方法 内联style 注入style 注入link 那么我们想要实现一键换肤 那么我们为了剥离干净dom和css 我们只能选择style和link这两种方法 核心思路 在html的head
  • Java反射机制和线程

    JAVA反射机制 已经加载过这个类 通过类名来找到这个类的所有相关信息 在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在运行时调用任意一个对象的成员变量和方法 生成动态代理 反
  • 远程桌面dos开启

    lt DOCTYPE html PUBLIC WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml strictdtd gt 注册表内容 Windows Registry Editor Versio
  • 用 Java 实现的八种常用排序算法

    八种排序算法可以按照如图分类 前置知识 1 算法稳定性 在一个序列中 能保证两个相等的数 经过排序之后 其在序列的前后位置顺序不变 A1 A2 排序前 A1 在 A2 前面 排序后 A1 还在 A2 前面 2 时间复杂度 时间复杂度是用于衡
  • Sublimewebinspector 断点不能打上的解决方法

    最近老大在sublime上开发出了我们产品的开发包 这个开发包能像ZenCoding一样快速打出前端代码 这样开发者用我们产品的概率就大多了 但是对于产品中的js代码 现在还没有很好的工具 搬砖的我小有雄心壮志的想给我们的产品开发一个JS代
  • 生成专题4

    文章转自微信公众号 机器学习炼丹术 作者 陈亦新 欢迎交流共同进步 联系方式 微信cyx645016617 学习论文 Analyzing and Improving the Image Quality of StyleGAN 文章目录 4
  • vue学习语法校验笔记总结

    vue语法校验需要安装eslint plugins vue插件 插件安装完成后 进入 插件配置 即可找到刚才安装插件 它的对应的配置文件是 eslintrc js 选项对应说明如下 module exports extends plugin
  • ES6之Map和Set有什么不同?

    一 Map 1 定义 Map是ES6提供的一种新的数据结构 它是键值对的集合 类似于对象 但是键的范围不限于字符串 各种类型的值都可以当做键 Object结构是 字符串 值 的对应 Map结构则是 值 值 的对应 2 代码示例 Map本身是