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第三课 修改元素属性及内容的代码
Mar 14 Javascript
jQuery UI 应用不同Theme的办法
Sep 12 Javascript
JavaScript实现自己的DOM选择器原理及代码
Mar 04 Javascript
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
Mar 25 Javascript
解析javascript 实用函数的使用详解
May 10 Javascript
javascript中字符串的定义示例代码
Dec 19 Javascript
jQuery中extend函数详解
Feb 13 Javascript
javascript实现图片延迟加载方法汇总(三种方法)
Aug 27 Javascript
javascript 判断两个日期之差的示例代码
Sep 05 Javascript
微信小程序 教程之引用
Oct 18 Javascript
在AngularJs中设置请求头信息(headers)的方法及不同方法的比较
Sep 04 Javascript
ng-alain的sf如何自定义部件的流程
Jun 12 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的array_multisort()使用方法介绍
2012/05/16 PHP
php通过字符串调用函数示例
2014/03/02 PHP
PHP实现的增强性mhash函数
2015/05/27 PHP
浅谈PHP封装CURL
2019/03/06 PHP
jquery插件制作 图片走廊 gallery
2012/08/17 Javascript
解析javascript 数组以及json元素的添加删除
2013/06/26 Javascript
JS模拟Dialog弹出浮动框效果代码
2015/10/16 Javascript
浅谈js中的延迟执行和定时执行
2016/05/31 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
2016/08/19 Javascript
微信公众号开发 实现点击返回按钮就返回到聊天界面
2016/12/15 Javascript
Bootstrap CSS组件之下拉菜单(dropdown)
2016/12/17 Javascript
angularjs封装$http为factory的方法
2017/05/18 Javascript
Vue.js项目部署到服务器的详细步骤
2017/07/17 Javascript
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
详解Eslint 配置及规则说明
2018/09/10 Javascript
Bootstrap table 服务器端分页功能实现方法示例
2020/06/01 Javascript
Vue插槽_特殊特性slot,slot-scope与指令v-slot说明
2020/09/04 Javascript
Vue2.x和Vue3.x的双向绑定原理详解
2020/11/05 Javascript
[04:09]2014DOTA2国际邀请赛Ti西雅图 历届冠军相继出局 BBC综述今日比赛
2014/07/20 DOTA
Python实现把回车符\r\n转换成\n
2015/04/23 Python
在Mac OS系统上安装Python的Pillow库的教程
2015/11/20 Python
Python 从列表中取值和取索引的方法
2018/12/25 Python
python解释器spython使用及原理解析
2019/08/24 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
2019/08/27 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
2019/10/11 Python
Django用内置方法实现简单搜索功能的方法
2020/12/18 Python
德国BA保镖药房中文网:Bodyguard Apotheke
2021/03/09 全球购物
Sql面试题
2013/03/20 面试题
《要下雨了》教学反思
2014/02/17 职场文书
家居装修公司创业计划书范文
2014/03/20 职场文书
天网工程实施方案
2014/03/26 职场文书
2014年教育培训工作总结
2014/12/08 职场文书
学校捐款活动总结
2015/05/09 职场文书
导游词之秦皇岛燕塞湖
2020/01/03 职场文书
读《茶花女》有感:山茶花的盛开与凋零
2020/01/17 职场文书
MYSQL主从数据库同步备份配置的方法
2021/05/26 MySQL