ES6 新增的 Set 和 Map 详解和区别

1. Set

1.1 定义

  • 类似于数组(类数组对象),可以存储任意类型的唯一值,无论是基本类型或者对象引用。
  • 成员的值都是唯一的,没有重复。
  • Set 是一个构造函数,通过 new 命令来创建 Set 对象。
const mySet = new Set([1, 2, null, NaN, { name: 'fruit' }])

Set 接收一个数组或具有 iterable 接口的其他数据结构作为参数,用来初始化。

1.2 属性

1.2.1 size 返回 Set 对象中(唯一的)元素的个数。
const mySet = new Set([1, 2, null, NaN, { name: 'fruit' }])
console.log(mySet.size) // 5 

1.3 操作方法

1.3.1 add(value) 添加某个值,返回 Set 结构本身
const mySet = new Set();
mySet.add('orange')
mySet.add('apple')
console.log(mySet)
1.3.2 delete(value) 删除某个值,返回一个布尔值,表示删除成功
const mySet = new Set();
mySet.add('orange')
mySet.add('apple')
console.log(mySet)
mySet.delete('orange')
console.log(mySet)
1.3.3 has(value) 返回一个布尔值,表示参数是否为 Set 的成员
const mySet = new Set();
mySet.add('orange')
mySet.add('apple')
console.log(mySet.has('apple')) // true
console.log(mySet.has('banana')) // false
1.3.4 clear() 清除所有成员,没有返回值
const mySet = new Set();
mySet.add('orange')
mySet.add('apple')
mySet.clear()
console.log(mySet)

1.4 遍历操作

Set 结构的实例有4个遍历方法,可用于遍历成员。

1.4.1 keys(): 返回键名的遍历器
1.4.2 values(): 返回键值的遍历器
1.4.3 entries(): 返回键值对的遍历器
1.4.4 forEach(): 使用回调函数遍历每个成员

2. Map

2.1 定义

  • Map 对象是键值对的集合。
  • Map 中的一个键只能出现一次。
  • Map() 是一个构造函数,通过 new 命令来创建 Map 对象。
const newMap = new Map([['name', 'banana'], ['age', 18]])
console.log(newMap)

Map 对象初始化的值为一个二维数组(一个元素是键值对的数组或其他可迭代对象)

2.2 属性

2.2.1 size 是可访问属性,返回 Map 对象的成员数量。
const newMap = new Map([['name', 'banana'], ['age', 18]])
console.log(newMap.size) // 2

2.3 操作方法

2.3.1 set() 为 Map 对象添加或更新一个指定了键(key)和值(value)的(新)键值对
const myMap = new Map()
myMap.set('name', 'banana')
myMap.set('age', 18)
console.log(myMap)
2.3.2 get() 从 Map 对象返回指定的元素
const myMap = new Map()
myMap.set('name', 'banana')
myMap.set('age', 18)
console.log(myMap.get('age')) // 18
2.3.3 delete() 移除 Map 对象中指定的元素
const myMap = new Map()
myMap.set('name', 'banana')
myMap.set('age', 18)
myMap.delete('age')
console.log(myMap)
2.3.4 has() 返回一个布尔值,判断指定键的元素是否存在。
const myMap = new Map()
myMap.set('name', 'banana')
myMap.set('age', 18)
console.log(myMap.has('age')) // true
myMap.delete('age')
console.log(myMap.has('age')) // false
2.3.5 clear() 移除 Map 对象中的所有元素
const myMap = new Map()
myMap.set('name', 'banana')
myMap.set('age', 18)
myMap.clear()
console.log(myMap)

2.4 遍历操作

  • forEach() 方法按照插入顺序依次对 Map 中每个键/值对执行一次给定的函数。
  • keys() 返回一个引用的迭代器对象。它包含按照顺序插入 Map 对象中每个元素的 key 值。
  • values() 方法返回一个新的迭代器对象。它包含按顺序插入 Map 对象中每个元素的 value 值。
  • entries() 方法返回一个新的迭代器对象,其中包含 Map 对象中按插入顺序排列的每个元素的 [key, value] 对

3. Set 和 Map 的相同点和区别

3.1 相同点

  • Map 和 Set 都是构造函数,必须使用 new 命令来创建对应的实例。
  • Map 和 Set 查找速度都非常快,时间复杂度为 O(1)。
  • Map 对象不允许键重复,Set 对象不允许值重复。

3.2 区别

  • Set 对象初始化的值为一维数组,Map 对象初始化的值为一个二维数组。
  • Map 对象的键不能改的,但是值能改;Set 对象只能通过迭代器来更改值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值