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 相关文章推荐
js 获取浏览器高度和宽度值(多浏览器)
Sep 02 Javascript
扩展easyui.datagrid,添加数据loading遮罩效果代码
Nov 02 Javascript
javascript:void(0)是什么意思示例介绍
Nov 17 Javascript
node.js中的fs.realpathSync方法使用说明
Dec 16 Javascript
jQuery图片特效插件Revealing实现拉伸放大
Apr 22 Javascript
javascript仿京东导航左侧分类导航下拉菜单效果
Nov 25 Javascript
改变checkbox默认选中状态及取值的实现代码
May 26 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
Mar 30 Javascript
JS实现的Unicode编码转换操作示例
Apr 28 Javascript
解决layui 复选框等内置控件不显示的问题
Aug 14 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
Dec 09 Javascript
详解JavaScript 异步编程
Jul 13 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
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
2017/01/11 PHP
js 父窗口控制子窗口的行为-打开,关闭,重定位,回复
2010/04/20 Javascript
使用JavaScript动态设置样式实现代码及演示动画
2013/01/25 Javascript
关于JS管理作用域的问题
2013/04/10 Javascript
javascript快速排序算法详解
2014/09/17 Javascript
实现js保留小数点后N位的代码
2014/11/13 Javascript
js跨域请求的5中解决方式
2015/07/02 Javascript
JS实现漂亮的淡蓝色滑动门效果代码
2015/09/23 Javascript
JS表格组件神器bootstrap table详解(基础版)
2015/12/08 Javascript
jQuery div拖拽用法实例
2016/01/14 Javascript
关于backbone url请求中参数带有中文存入数据库是乱码的快速解决办法
2016/06/13 Javascript
jQuery+ajax实现实用的点赞插件代码
2016/07/06 Javascript
Angular2  NgModule 模块详解
2016/10/19 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
详解React中的组件通信问题
2017/07/31 Javascript
5分钟快速掌握JS中var、let和const的异同
2018/09/19 Javascript
Nodejs让异步变成同步的方法
2019/03/02 NodeJs
[05:17]DOTA2睡衣妹卖萌求签名 CJ第二天全明星影像
2013/07/28 DOTA
[43:48]Ti4正赛第一天 VG vs NEWBEE 2
2014/07/19 DOTA
Python中__init__和__new__的区别详解
2014/07/09 Python
Python三元运算实现方法
2015/01/12 Python
python2.7 mayavi 安装图文教程(推荐)
2017/06/22 Python
Python Sympy计算梯度、散度和旋度的实例
2019/12/06 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
python上传时包含boundary时的解决方法
2020/04/08 Python
在Keras中利用np.random.shuffle()打乱数据集实例
2020/06/15 Python
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
2014/01/07 面试题
正规的求职信范文分享
2013/12/11 职场文书
社区网格化管理实施方案
2014/03/21 职场文书
政风行风评议整改方案
2014/09/15 职场文书
领导干部群众路线对照检查材料
2014/11/05 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书
2016年全国助残日活动总结
2016/04/01 职场文书
pytorch 中nn.Dropout的使用说明
2021/05/20 Python
使用 Docker Compose 构建复杂的多容器App
2022/04/30 Servers