当前位置:网站首页>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带来了真正的键值存储机制;允许任何类型的键,具有极快的查找速度(存储键值较少的情况下)
觉得本文写的不错的,希望点赞、收藏、加关注,每月不定期更新干货哦,谢谢您嘞!
你可能感兴趣的文章:
边栏推荐
猜你喜欢

Apifox generates interface documentation tutorial and operation steps

Greenplum 6.0有哪些不可错过的硬核升级与应用?

IO/multiplexing (select/poll/epoll)

别被隐私计算表象骗了 | 量子位智库报告(附下载)

来n遍剑指--04. 二维数组中的查找

JD.com was brutally killed by middleware on two sides. After 30 days of learning this middleware booklet, it advanced to Ali.

Decoding Redis' most overlooked high CPU and memory usage issues

OneNote如何修改已有的笔记本为默认的快速笔记?

Why is Prometheus a monitoring artifact sufficient to replace Zabbix?

漫谈金丝雀部署(Canary Deployment)
随机推荐
JS事件的相关特性以及原理
[PostgreSQL] - 存储结构及缓存shared_buffers
Matlab基础(1)——基础知识
13-GuliMall 基础篇总结
Analysis of AI recognition technology and application scenarios of TSINGSEE intelligent video analysis gateway
云主机上的MongoDB被威胁,开启AUTH认证
【Kaggle比赛常用trick】K折交叉验证、TTA
CMake library search function does not search LD_LIBRARY_PATH
如何把Excel表格显示到邮件正文里?
EXCEL解决问题:如何查找目标区域,是否包含指定字符串?
概率论的学习整理2:如何对随机实验的对象:“事件” 进行计数呢? 四种计数方法,不只是排列组合
[ASP.NET Core] Dependency Injection for Option Classes
即时通讯-改变社交与工作状态的新型软件
CMake库搜索函数居然不搜索LD_LIBRARY_PATH
nodeJs--fs模块
What happened when the computer crashed?
力扣——11.盛最多水的容器
unity初学6——简易的UI制作(血条制作)和音频加入以及NPC的对话气泡(2d)
【Kaggle:UW-Madison GI Tract Image Segmentation】肠胃分割比赛:赛后复盘+数据再理解
Matlab绘图(1)——二维绘图