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实际应用:innerHTMl和确认提示的使用
Jun 22 Javascript
网页整体变灰白色(兼容各浏览器)实例
Apr 21 Javascript
js动态为代码着色显示行号
May 29 Javascript
jQuery搜索同辈元素方法
Feb 10 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
Oct 22 Javascript
同步文本框内容JS代码实现
Aug 04 Javascript
bootstrap 下拉多选框进行多选传值问题代码分析
Feb 14 Javascript
Angular中支持SCSS的方法
Nov 18 Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
Jul 13 jQuery
js对象数组和对象的使用实例详解
Aug 27 Javascript
JS实现星星海特效
Dec 24 Javascript
Node登录权限验证token验证实现的方法示例
May 25 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加密解密函数代码
2013/06/19 PHP
windows7下安装php的imagick和imagemagick扩展教程
2014/07/04 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
2014/07/22 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
2017/06/15 PHP
PHP错误处理函数register_shutdown_function使用示例
2017/07/03 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
Thinkphp5.0框架视图view的循环标签用法示例
2019/10/12 PHP
javascript中this做事件参数相关问题解答
2013/03/17 Javascript
nodejs下打包模块archiver详解
2014/12/03 NodeJs
JQuery.Ajax()的data参数类型实例详解
2015/11/20 Javascript
Angularjs 自定义服务的三种方式(推荐)
2016/08/02 Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
2017/01/17 Javascript
JS实现websocket长轮询实时消息提示的效果
2017/10/10 Javascript
Vue2.2.0+新特性整理及注意事项
2018/08/22 Javascript
vue 集成 vis-network 实现网络拓扑图的方法
2019/08/07 Javascript
JS异步宏队列与微队列原理区别详解
2020/07/02 Javascript
Django利用cookie保存用户登录信息的简单实现方法
2019/05/27 Python
Python中的 is 和 == 以及字符串驻留机制详解
2019/06/28 Python
pycharm通过ssh连接远程服务器教程
2020/02/12 Python
关于box-sizing的全面理解
2016/07/28 HTML / CSS
美国最大的骑马用品零售商:HorseLoverZ
2017/01/12 全球购物
万宝龙英国官网:Montblanc手表、书写工具、皮革和珠宝
2018/10/16 全球购物
香港现代设计家具品牌:Ziinlife Furniture
2018/11/13 全球购物
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
可爱的童装和鞋子:Fabkids
2019/08/16 全球购物
Sunglass Hut巴西网上商店:男女太阳镜
2020/10/04 全球购物
我的网上商城创业计划书
2013/12/26 职场文书
同学会邀请书大全
2014/01/12 职场文书
成绩单家长评语大全
2014/04/16 职场文书
办理房产过户的委托书
2014/09/14 职场文书
村党支部对照检查材料思想汇报
2014/09/28 职场文书
先进工作者推荐材料
2014/12/23 职场文书
爱心捐款活动总结
2015/05/09 职场文书
golang中的空接口使用详解
2021/03/30 Python
MySQL 原理与优化之Update 优化
2022/08/14 MySQL