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带来了真正的键值存储机制;允许任何类型的键,具有极快的查找速度(存储键值较少的情况下)。

相关推荐
崔庆才丨静觅7 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60618 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了8 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅8 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅9 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅9 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment9 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅9 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊9 小时前
jwt介绍
前端
爱敲代码的小鱼9 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax