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下判断Id是否存在的代码
Jan 06 Javascript
JS基础之undefined与null的区别分析
Aug 08 Javascript
javascript中的括号()用法小结
Apr 14 Javascript
Redis基本知识、安装、部署、配置笔记
Mar 05 Javascript
jQuery延迟加载图片插件Lazy Load使用指南
Mar 25 Javascript
js上传图片及预览功能实例分析
Apr 24 Javascript
jQuery实现的多滑动门,多选项卡效果代码
Mar 28 Javascript
vue.js从安装到搭建过程详解
Mar 17 Javascript
vue自定义filters过滤器
Apr 26 Javascript
ES6箭头函数和扩展实例分析
May 23 Javascript
Openlayers实现测量功能
Sep 25 Javascript
Javascript的promise,async和await的区别详解
Mar 24 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获取url字符串截取路径的文件名和扩展名的函数
2010/01/22 PHP
一段实用的php验证码函数
2016/05/19 PHP
PHP PDOStatement::execute讲解
2019/01/31 PHP
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
2009/08/15 Javascript
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
2010/07/26 Javascript
基于jquery的模态div层弹出效果
2010/08/21 Javascript
javascript学习笔记(二) js一些基本概念
2012/06/18 Javascript
javascript打印输出json实例
2013/11/11 Javascript
jQuery表格排序组件-tablesorter使用示例
2014/05/26 Javascript
javascript同步服务器时间和同步倒计时小技巧
2015/09/24 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
2015/12/11 Javascript
jQuery动态添加与删除tr行实例代码
2016/10/18 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
2017/03/08 Javascript
javascript中神奇的 Date对象小结
2017/10/12 Javascript
JavaScript函数绑定用法实例分析
2017/11/14 Javascript
微信小程序实现页面跳转传值以及获取值的方法分析
2017/12/18 Javascript
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
Vue一个案例引发的递归组件的使用详解
2018/11/15 Javascript
React实现阿里云OSS上传文件的示例
2020/08/10 Javascript
详谈Python基础之内置函数和递归
2017/06/21 Python
python模拟事件触发机制详解
2018/01/19 Python
使用Python监控文件内容变化代码实例
2018/06/04 Python
详解python 内存优化
2020/08/17 Python
HTML5等待加载动画效果
2017/07/27 HTML / CSS
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
夜大自我鉴定
2013/10/31 职场文书
小班下学期评语
2014/05/04 职场文书
商务经理岗位职责
2014/08/03 职场文书
个人房屋买卖协议书(范本)
2014/10/04 职场文书
商超业务员岗位职责
2015/02/13 职场文书
升学宴家长答谢词
2015/09/29 职场文书
Python答题卡识别并给出分数的实现代码
2021/06/22 Python
JS数组方法some、every和find的使用详情
2021/10/05 Javascript