当前位置:网站首页>ES6 Set与Map是什么,如何使用
ES6 Set与Map是什么,如何使用
2022-07-30 12:22:00 【程序员良仔】
前言
在ES6之前,我们存储数据的结构主要有两种:数组、对象,而在ES6中新增了另外两种数据结构:Set、Map,接下来就聊聊什么是Set、Map
一、Set
1、什么是Set
Set是ES6新增的数据结构,类似数组,但是它的元素成员是唯一的
2、如何使用,属性和方法
1. 创建Set
① new Set()方式创建
let a = new Set()
② 通过传入数组方式创建
let a = new Set([1, 2, 'aliang'])
2. Set.size:返回Set中元素的数量
let a = new Set([1, 2, 'aliang'])
a.size // 3
3. Set.has(key):查找Set对象中是否存在key,返回一个布尔值
let a = new Set([1, 2, 'aliang'])
a.has('aliang') // true
4. Set.add(key):往Set对象中添加一个元素
let a = new Set()
a.add(1)
5. Set.delete(key):删除元素key
let a = new Set([1, 2, 'aliang'])
a.delete("aliang")
6. Set.clear(): 清空Set的全部元素
let a = new Set([1, 2, 'aliang'])
a.clear()
7. 遍历 Set
① forEach 遍历
let a = new Set([1, 2, 'aliang'])
a.forEach(item => {
console.log(item)
})
② for of 遍历
let a = new Set([1, 2, 'aliang'])
for(let item of a) {
console.log(item)
}
8. Set 转 数组
① 使用 Array.from 方法
let a = new Set([1, 2, 'aliang'])
let arr = Array.from(a)
② 使用扩展运算符
let a = new Set([1, 2, 'aliang'])
let arr = [...a]
3、Set的使用场景
可以利用元素成员唯一性,和方法has()是否有某个元素;如实现数组去重等等
代码实现
// 数组去重
let arr = [1, 1, 2, 3]
let unique = [...new Set(arr)] // [1, 2, 3]
let a = new Set([1, 2, 'aliang'])
let b = new Set([2, 3, 4])
// 并集
let union = [...new Set([...a, ...b])] // [1, 2, 'aliang', 3, 4]
// 交集
let intersect = [...new Set([...a].filter(item => b.has(item)))] // [2]
// 差集
let difference = [
...new Set([...a].filter(item => !b.has(item))),
...new Set([...b].filter(item => !a.has(item))),
] // [1, 'aliang', 3, 4]
二、Map
1、什么是Map
Map是ES6新增的数据结构,类似于对象,本质上就是键值对的集合,对象的键只能是字符串或者Symbols,但Map的键可以为任意类型
2、如何使用,属性和方法
1. 创建Map
① new Map()方式创建
let a = new Map()
② 通过传入二维数组方式创建
let kvArray = [
['key1', 'value1'],
['key2', 'value2'],
]
let a = new Map(kvArray)
2. Map.size:返回Map对象中键值对数量
let kvArray = [
['key1', 'value1'],
['key2', 'value2'],
]
let a = new Map(kvArray)
a.size // 2
3. Map.has(key):查找Map对象中是否存在key,返回一个布尔值
let kvArray = [
['key1', 'value1'],
['key2', 'value2'],
]
let a = new Map(kvArray)
a.has('key1') // true
4. Map.set(key, value):设置Map对象的键值对(键名,键值),返回当前对象
let a = new Map()
a.set(0, 'zero')
a.set('key1', 'value1')
5. Map.get(key):返回key值对应的value,如果key不存在则返回undefined
let kvArray = [
['key1', 'value1'],
['key2', 'value2'],
]
let a = new Map(kvArray)
a.get('key1') // value1
5. Map.delete(key):删除Map对象中键名为key的键值对
let kvArray = [
['key1', 'value1'],
['key2', 'value2'],
]
let a = new Map(kvArray)
a.delete("key1")
6. Map.clear():移除Map对象中保存的所有键名/键值对
let kvArray = [
['key1', 'value1'],
['key2', 'value2'],
]
let a = new Map(kvArray)
a.clear()
7. 遍历 Map
① forEach 遍历
let kvArray = [
['key1', 'value1'],
['key2', 'value2'],
]
let a = new Map(kvArray)
a.forEach((value, key) => {
console.log(key, value)
})
② for of 遍历
let kvArray = [
['key1', 'value1'],
['key2', 'value2'],
]
let a = new Map(kvArray)
for (let [key, value] of a) {
console.log(key, value)
}
8. Map.keys():返回一个新的Iterator对象 它包含按照顺序插入Map对象中每个元素的key值
let kvArray = [
['key1', 'value1'],
['key2', 'value2'],
]
let a = new Map(kvArray)
for (let key of a.keys()) {
console.log(key)
}
9. Map.values():返回一个新的Iterator对象 它包含按照顺序插入Map对象中每个元素的value值
let kvArray = [
['key1', 'value1'],
['key2', 'value2'],
]
let a = new Map(kvArray)
for (let value of a.values()) {
console.log(value)
}
10. Map.entries():该方法返回一个新的Iterator对象 它包含按顺序插入Map对象中每个[key,value]数组
let kvArray = [
['key1', 'value1'],
['key2', 'value2'],
]
let a = new Map(kvArray)
for (let [key, value] of a.entries()) {
console.log(key, value)
}
11. Map 转 数组
① 使用 Array.from 方法
let kvArray = [
['key1', 'value1'],
['key2', 'value2'],
]
let a = new Map(kvArray)
let arr = Array.from(a)
② 使用扩展运算符
let kvArray = [
['key1', 'value1'],
['key2', 'value2'],
]
let a = new Map(kvArray)
let arr = [...a]
3、Map的使用场景
不关心键值对的键名到底是什么,那么在这种情况下,你可以用Map
三、总结
1、Set:是一组Key的集合,但不存储Value,由于Key不能重复,因此他最大的特点是所有的元素都是唯一的
2、Map:是键值对的集合,为JS带来了真正的键值存储机制;允许任何类型的键,具有极快的查找速度(存储键值较少的情况下)
觉得本文写的不错的,希望点赞、收藏、加关注,每月不定期更新干货哦,谢谢您嘞!
你可能感兴趣的文章:
边栏推荐
猜你喜欢

概率论的学习整理3: 概率的相关概念

概率论的学习整理--番外2:和二项式,组合相关的杨辉三角

概率论的学习整理2:如何对随机实验的对象:“事件” 进行计数呢? 四种计数方法,不只是排列组合

大手笔!两所“双一流”大学,获75亿元重点支持!

历时两月,终拿字节跳动offer,算法面试题分享「带答案」

AlphaFold预测了几乎所有已知蛋白质!涵盖100万物种2.14亿结构,数据集开放免费用...

概率论的学习整理--番外1:可重复且无次序的计数公式C(n+k-1,k) 的例题 : 同时丢3个骰子,会有多少种情况?答案不是216而是56!
![[BJDCTF2020]Cookie is so stable-1|SSTI注入](/img/48/34955bbe3460ef09a5b8213c7cc161.png)
[BJDCTF2020]Cookie is so stable-1|SSTI注入
![[BJDCTF2020]Cookie is so stable-1|SSTI injection](/img/48/34955bbe3460ef09a5b8213c7cc161.png)
[BJDCTF2020]Cookie is so stable-1|SSTI injection

CV-Model【2】:MobileNet v1
随机推荐
云主机上的MongoDB被威胁,开启AUTH认证
概率论的学习整理3: 概率的相关概念
CMake库搜索函数居然不搜索LD_LIBRARY_PATH
Another blast!Ali's popular MySQL advanced collection is open source, reaching P7
【Kaggle:UW-Madison GI Tract Image Segmentation】肠胃分割比赛:赛后复盘+数据再理解
概率论得学习整理--番外3:二项式定理和 二项式系数
MySQL【多表查询】
湖仓一体电商项目(一):项目背景和架构介绍
[SCTF2019]Flag Shop
初级永磁直线电机双动子电流镜像容错控制
概率论的学习整理1: 集合和事件
力扣——11.盛最多水的容器
EasyNVR更新版本至(V5.3.0)后页面不显示通道配置该如何解决?
Matlab基础(0)——命令行常用指令
如何把Excel表格显示到邮件正文里?
Js - 内置对象
概率论的学习和整理--番外4: 关于各种平均数:算术平均数,几何平均数,调和平均数,以及加权平均数和平方平均数 (未完成)
no matching host key type found. Their offer: ssh-rsa
Mysql 批量插入事务唯一键重复处理
dbaplus丛书丨《MySQL DBA工作笔记》限量签名版来了!