js中Map和Set的用法及区别实例详解


Posted in Javascript onFebruary 15, 2022

首先了解一下 Map

Map 是一组键值对的结构,和 JSON 对象类似。

(1) Map数据结构如下

这里我们可以看到的是Map的数据结构是一个键值对的结构

js中Map和Set的用法及区别实例详解

(2) key 不仅可以是字符串还可以是对象

var obj ={name:"小如",age:9}
let map = new Map()
map.set(obj,"111")

打印结果如下

js中Map和Set的用法及区别实例详解

(3) Map常用语法如下

//初始化`Map`需要一个二维数组(请看 Map 数据结构),或者直接初始化一个空`Map` 
let map = new Map();

//添加key和value值
map.set('Amy','女')
map.set('liuQi','男')

//是否存在key,存在返回true,反之为false
map.has('Amy') //true
map.has('amy') //false

//根据key获取value
map.get('Amy') //女

//删除 key为Amy的value
map.delete('Amy')
map.get('Amy') //undefined  删除成功

(4) 一个key只能对应一个value,多次对一个key放入value,后面的值会把前面的值覆盖掉

var map =new Map
map.set('Amy',"女")
map.set('Amy',"男")
console.log(map)

打印结果如下

js中Map和Set的用法及区别实例详解

再来了解一下 Set

Set 对象类似于数组,且成员的值都是唯一的

(1) 打印出的数据结构如下

这里打印出来是一个对象

js中Map和Set的用法及区别实例详解

(2) 最常用来去重使用,去重方法有很多但是都没有它运行的快。

var arr=[1,3,4,2,5,1,4]
// 这里原本是一个对象用了es6的语法 转化成了数组,就是转化数组之前已经过滤掉了重复的元素了
var arr2=[...new Set(arr)] //[1,3,4,2,5]

(3) Set常用语法如下

//初始化一个Set ,需要一个Array数组,要么空Set
var set = new Set([1,2,3,5,6]) 
console.log(set)  // {1, 2, 3, 5, 6}

//添加元素到Set中
set.add(7) //{1, 2, 3, 5, 6, 7}

//删除Set中的元素
set.delete(3) // {1, 2, 5, 6, 7}

//检测是否含有此元素,有为true,没有则为false
set.has(2) //true

总结Map和Set的区别

(1) 这两种方法具有极快的查找速度;那么下面我们来对比一下Map,Set,Array 的执行时间

//首先初始化数据
var lng=100
var arr =new Array(lng).fill(2)
var set =new Set(arr)
let map =new Map()
for(var i=0;i<lng;i++){
arr[i]=i
map.set(i,arr[i])
}

// Array
console.time()
for(var j=0;j<lng;j++){
arr.includes(j)
}
console.timeEnd()  //default: 0.01220703125 ms


// Set
console.time()
for(var j=0;j<lng;j++){
set.has(j)
}
console.timeEnd()  // default: 0.005859375 ms

// Map
console.time()
for(var j=0;j<lng;j++){
map.has(j)
}
console.timeEnd()
// default: 0.007080078125 ms

通过以上几种方法我们可以看到,Set执行时间最短,那么查找速度最快,当然了Set 和 Map的查找速度都很快想差不大,所以说这两种方法具有极快的查找速度。

(2) 初始化需要的值不一样,Map需要的是一个二维数组,而Set 需要的是一维 Array 数组

(3) Map 和 Set 都不允许键重复

(4) Map的键是不能修改,但是键对应的值是可以修改的;Set不能通过迭代器来改变Set的值,因为Set的值就是键。

(5) Map 是键值对的存在,值也不作为健;而 Set 没有 value 只有 key,value 就是 key;

结语:

Map 和 Set 数据结构是ES6语法,最大优点就是运行时间少大大提高了性能。

到此这篇关于js中Map和Set用法及区别的文章就介绍到这了,更多相关js中Map和Set用法区别内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript中的typeof操作符用法实例
Apr 05 Javascript
JS中的form.submit()不能提交表单的错误原因
Oct 08 Javascript
js实现数字每三位加逗号的方法
Feb 05 Javascript
JavaScript中的Math.atan2()方法使用详解
Jun 15 Javascript
jquery延迟对象解析
Oct 26 Javascript
详解Web使用webpack构建前端项目
Sep 23 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
Jul 06 Javascript
解决 viewer.js 动态更新图片导致无法预览的问题
May 14 Javascript
javascript关于“时间”的一次探索
Jul 24 Javascript
JS实现音乐钢琴特效
Jan 06 Javascript
jQuery实现移动端笔触canvas电子签名
May 21 jQuery
vue实现div单选多选功能
Jul 16 Javascript
canvas实现贪食蛇的实践
Vue自定义铃声提示音组件的实现
Jan 22 #Vue.js
JavaScript实例 ODO List分析
Jan 22 #Javascript
JavaScript ES6的函数拓展
Jan 18 #Javascript
Vue提供的三种调试方式你知道吗
Jan 18 #Vue.js
详解Vue项目的打包方式(生成dist文件)
Jan 18 #Vue.js
html5调用摄像头截图功能
Jan 18 #Javascript
You might like
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
2011/10/31 PHP
基于php常用函数总结(数组,字符串,时间,文件操作)
2013/06/27 PHP
PHP的cURL库简介及使用示例
2015/02/06 PHP
Laravel利用gulp如何构建前端资源详解
2018/06/03 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
PHP网页缓存技术优点及代码实例
2020/07/29 PHP
如何利用PHP实现上传图片功能详解
2020/09/24 PHP
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
页面加载完成后再执行JS的jquery写法以及区别说明
2014/02/22 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
jQuery获得document和window对象宽度和高度的方法
2015/03/25 Javascript
在Ubuntu系统上安装Node.JS的教程
2015/10/15 Javascript
Bootstrap每天必学之前端开发框架
2015/11/19 Javascript
js右下角弹出提示框示例代码
2016/01/12 Javascript
AngularJS入门教程中SQL实例详解
2016/07/27 Javascript
原生javascript实现的ajax异步封装功能示例
2016/11/03 Javascript
利用vscode编写vue的简单配置详解
2017/06/17 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
JavaScript数据类型的存储方法详解
2017/08/25 Javascript
vue如何通过id从列表页跳转到对应的详情页
2018/05/01 Javascript
Angular2之二级路由详解
2018/08/31 Javascript
微信小程序五子棋游戏的棋盘,重置,对弈实现方法【附demo源码下载】
2019/02/20 Javascript
微信小程序时间戳转日期的详解
2019/04/30 Javascript
Vue中通过属性绑定为元素绑定style行内样式的实例代码
2020/04/30 Javascript
VueCli4项目配置反向代理proxy的方法步骤
2020/05/17 Javascript
js实现翻牌小游戏
2020/07/31 Javascript
Python编程实现从字典中提取子集的方法分析
2018/02/09 Python
Python 查看list中是否含有某元素的方法
2018/06/27 Python
Python合并多个Excel数据的方法
2018/07/16 Python
python数据结构之线性表的顺序存储结构
2018/09/28 Python
django 实现celery动态设置周期任务执行时间
2019/11/19 Python
pytorch实现mnist分类的示例讲解
2020/01/10 Python
公司法定代表人授权委托书
2014/09/29 职场文书
乡镇2014法制宣传日活动总结
2014/11/01 职场文书
财政局个人总结
2015/03/04 职场文书
务工证明怎么写
2015/06/18 职场文书