ES6的Set与Map

在ES6之前,我们存储数据的结构主要有两种:数组、对象,而在ES6中新增了另外两种数据结构:Set、Map。

一、什么是Set?

Set是ES6新增的数据结构,类似数组,但是它的元素成员是唯一的。

Set的使用,属性和方法
1. 创建Set

① new Set()方式创建

javascript 复制代码
let a = new Set()

② 通过传入数组方式创建

javascript 复制代码
let a = new Set([1, 2, 'akun'])
2. Set.size:返回Set中元素的数量
javascript 复制代码
let a = new Set([1, 2, 'akun'])

a.size // 3
3. Set.has(key):查找Set对象中是否存在key,返回一个布尔值
javascript 复制代码
let a = new Set([1, 2, 'akun'])

a.has('akun') // true
4. Set.add(key):往Set对象中添加一个元素
javascript 复制代码
let a = new Set()

a.add(1)
5. Set.delete(key):删除元素key
javascript 复制代码
let a = new Set([1, 2, 'akun'])

a.delete("akun")
6. Set.clear(): 清空Set的全部元素
javascript 复制代码
let a = new Set([1, 2, 'akun'])

a.clear()
7. 遍历 Set

① forEach 遍历

javascript 复制代码
let a = new Set([1, 2, 'akun'])

a.forEach(item => {
  console.log(item)
})

② for of 遍历

javascript 复制代码
let a = new Set([1, 2, 'akun'])

for(let item of a) {
 console.log(item)
}
8. Set 转 数组

① 使用 Array.from 方法

javascript 复制代码
let a = new Set([1, 2, 'akun'])

let arr = Array.from(a)

② 使用扩展运算符

javascript 复制代码
let a = new Set([1, 2, 'akun'])

let arr = [...a]

Set的使用场景:如可以利用元素成员唯一性实现数组去重,方法has()判断是否有某个元素等等。

代码的实现:

javascript 复制代码
 // 数组去重
 let arr = [1, 1, 2, 3]
 let unique = [...new Set(arr)] // [1, 2, 3]
 

 let a = new Set([1, 2, 'akun'])
 let b = new Set([2, 3, 4])

 // 并集
 let union = [...new Set([...a, ...b])] // [1, 2, 'akun', 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, 'akun', 3, 4]

二、什么是Map?

Map是ES6新增的数据结构,类似于对象,本质上就是键值对的集合,对象的键只能是字符串或者Symbols,但Map的键可以为任意类型。

Map的使用,属性和方法
1. 创建Map

① new Map()方式创建

javascript 复制代码
let a = new Map()

② 通过传入二维数组方式创建

javascript 复制代码
let kvArray = [
  ['key1', 'value1'],
  ['key2', 'value2'],
]

let a = new Map(kvArray)
2. Map.size:返回Map对象中键值对数量
javascript 复制代码
let kvArray = [
  ['key1', 'value1'],
  ['key2', 'value2'],
]

let a = new Map(kvArray)
a.size // 2
3. Map.has(key):查找Map对象中是否存在key,返回一个布尔值
javascript 复制代码
let kvArray = [
  ['key1', 'value1'],
  ['key2', 'value2'],
]

let a = new Map(kvArray)
a.has('key1') // true
4. Map.set(key, value):设置Map对象的键值对(键名,键值),返回当前对象
javascript 复制代码
let a = new Map()
a.set(0, 'zero')
a.set('key1', 'value1')
5. Map.get(key):返回key值对应的value,如果key不存在则返回undefined
javascript 复制代码
let kvArray = [
  ['key1', 'value1'],
  ['key2', 'value2'],
]

let a = new Map(kvArray)
a.get('key1') // value1
6. Map.delete(key):删除Map对象中键名为key的键值对
javascript 复制代码
let kvArray = [
  ['key1', 'value1'],
  ['key2', 'value2'],
]

let a = new Map(kvArray)
a.delete("key1")
7. Map.clear():移除Map对象中保存的所有键名/键值对
javascript 复制代码
let kvArray = [
  ['key1', 'value1'],
  ['key2', 'value2'],
]

let a = new Map(kvArray)
a.clear()
8**. 遍历 Map**

① forEach 遍历

javascript 复制代码
let kvArray = [
  ['key1', 'value1'],
  ['key2', 'value2'],
]

let a = new Map(kvArray)

a.forEach((value, key) => {
  console.log(key, value)
})

② for of 遍历

javascript 复制代码
let kvArray = [
  ['key1', 'value1'],
  ['key2', 'value2'],
]

let a = new Map(kvArray)

for (let [key, value] of a) {
  console.log(key, value)
}
9**. Map.keys()**:返回一个新的Iterator对象,它包含按照顺序插入Map对象中每个元素的key值
javascript 复制代码
let kvArray = [
  ['key1', 'value1'],
  ['key2', 'value2'],
]

let a = new Map(kvArray)

for (let key of a.keys()) {
  console.log(key)
}
10**. Map.values()**:返回一个新的Iterator对象,它包含按照顺序插入Map对象中每个元素的value值
javascript 复制代码
let kvArray = [
  ['key1', 'value1'],
  ['key2', 'value2'],
]

let a = new Map(kvArray)

for (let value of a.values()) {
  console.log(value)
}
11. Map.entries():该方法返回一个新的Iterator对象,它包含按顺序插入Map对象中每个[key, value]数组
javascript 复制代码
let kvArray = [
  ['key1', 'value1'],
  ['key2', 'value2'],
]

let a = new Map(kvArray)

for (let [key, value] of a.entries()) {
  console.log(key, value)
}
12. Map 转 数组

① 使用 Array.from 方法

javascript 复制代码
let kvArray = [
  ['key1', 'value1'],
  ['key2', 'value2'],
]

let a = new Map(kvArray)
let arr = Array.from(a)

② 使用扩展运算符

javascript 复制代码
let kvArray = [
  ['key1', 'value1'],
  ['key2', 'value2'],
]

let a = new Map(kvArray)
let arr = [...a]

Map的使用场景:不关心键值对的键名到底是什么,那么在这种情况下,可以用Map。

三、总结

1、Set:是一组Key的集合,但不存储Value,由于Key不能重复,因此他最大的特点是所有的元素都是唯一的;

2、Map:是键值对的集合,为JS带来了真正的键值存储机制;允许任何类型的键,具有极快的查找速度(存储键值较少的情况下)。

相关推荐
朝阳39几秒前
Electron-vite【实战】MD 编辑器 -- 大纲区(含自动生成大纲,大纲缩进,折叠大纲,滚动同步高亮大纲,点击大纲滚动等)
javascript·electron·编辑器
X_StarX25 分钟前
web程序设计期末复习-填空题
前端·学习·html·web·大学生·期末考
几何心凉28 分钟前
4 年融资 1 亿美金,ProtonBase 背后的技术雄心 |专访小质科技 CEO 王绍翾
前端
得物技术29 分钟前
得物研发自测 & 前端自动化测试体系建设
前端·测试
是忽然之间1 小时前
vue对接帆软bi
前端
海底火旺1 小时前
从零实现语音合成:基于火山引擎TTS的前端实践
前端·人工智能·react.js
jackeyfive1 小时前
最快速搭建博客并部署到 GitHub Pages
前端·github
前端付豪1 小时前
汇丰实时风控数据流揭秘:Kafka + Flink + CEP 规则引擎全链路实战
前端·后端·架构
Sibyllala1 小时前
UE5.4——使用UltraDynamicSky实现天气切换和时间变化
前端
溪饱鱼1 小时前
第七章: SEO与渲染方式 三
前端·seo