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 相关文章推荐
jQuery开发者都需要知道的5个小技巧
Jan 08 Javascript
window.location.hash 使用说明
Nov 08 Javascript
一个轻量级的javascript库 pj介绍
Dec 19 Javascript
在网站上应该用的30个jQuery插件整理
Nov 03 Javascript
javascript检测对象中是否存在某个属性判断方法小结
May 19 Javascript
javascript跟随滚动效果插件代码(javascript Follow Plugin)
Aug 03 Javascript
jquery 使用简明教程
Mar 05 Javascript
javascript进行数组追加方法小结
Jun 16 Javascript
网页下载文件期间如何防止用户对网页进行其他操作
Jun 27 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
Jul 15 Javascript
微信小程序-详解数据缓存
Nov 24 Javascript
JavaScript登录记住密码操作(超简单代码)
Mar 22 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
也谈截取首页新闻 - 范例
2006/10/09 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
2013/10/26 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
2016/12/24 PHP
基于jQuery的实现简单的分页控件
2010/10/10 Javascript
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
2012/01/15 Javascript
JS禁用浏览器退格键实现思路及代码
2013/10/29 Javascript
from表单多个按钮提交用onclick跳转不同action
2014/04/24 Javascript
JavaScript操作cookie类实例
2015/03/31 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
2016/05/07 Javascript
教你如何在Node.js中使用jQuery
2016/08/28 Javascript
Vue实现购物车功能
2017/04/27 Javascript
如何从头实现一个node.js的koa框架
2019/06/17 Javascript
vue项目中实现缓存的最佳方案详解
2019/07/11 Javascript
vue动态子组件的两种实现方式
2019/09/01 Javascript
Antd下拉选择,自动匹配功能的实现
2020/10/24 Javascript
js实现菜单跳转效果
2020/12/11 Javascript
[25:45]2018DOTA2亚洲邀请赛4.5SOLO赛 Sylar vs Paparazi
2018/04/06 DOTA
python创建只读属性对象的方法(ReadOnlyObject)
2013/02/10 Python
go和python调用其它程序并得到程序输出
2014/02/10 Python
python在windows下实现ping操作并接收返回信息的方法
2015/03/20 Python
Python2中的raw_input() 与 input()
2015/06/12 Python
Python 专题一 函数的基础知识
2017/03/16 Python
python中的字典操作及字典函数
2018/01/03 Python
python实现将excel文件转化成CSV格式
2018/03/22 Python
python2.x实现人民币转大写人民币
2018/06/20 Python
python try 异常处理(史上最全)
2019/03/07 Python
python 随机生成10位数密码的实现代码
2019/06/27 Python
python多线程和多进程关系详解
2020/12/14 Python
CSS3制作日历实现代码
2012/01/21 HTML / CSS
大学专科自荐信
2014/06/17 职场文书
学生检讨书如何写
2014/10/30 职场文书
大学生心理健康活动总结
2015/05/08 职场文书
python tkinter Entry控件的焦点移动操作
2021/05/22 Python
React forwardRef的使用方法及注意点
2021/06/13 Javascript
Python获取字典中某个key的value
2022/04/13 Python