Map与Set
1. Map
1.1 定义
map
保存键值对。任何值(对象或者原始值)都可以作为一个键或者值。构造函数可以接受一个数组作为参数。
1.2 map的属性
size:返回map对象中所包含的键值对的个数
1.3 map的方法
set(key,val)
:向Map中添加新元素get(key)
返回指定键的值has(key)
判断是否包含key对应的值。有返回true。否则返回false;delete(key)
clear()
清除map中的所有
1.4 遍历方法
keys()
返回所有的键名的遍历器values()
返回键值的遍历器entries()
:返回键值对的遍历器forEach()
使用回调函数遍历每个成员
2.Set
2.1 定义:单列集合
set对象允许你存储任何类型的值,无论是原始值还是对象。。类似与数组,但是成员的值都是唯一的,没有重复的值
set本身是一个构造函数,用来生成Set
数据结构。Set
函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。
2.2 set中的特殊值
Set
对象存储的值总是唯一的,所以需要判断两个值是否恒等。有几个特殊值需要特殊对待:
- +0 与 -0 在存储判断唯一性的时候是恒等的,所以不重复
undefined
与undefined
是恒等的,所以不重复- NaN 与 NaN 是不恒等的,但是在 Set 中认为NaN与NaN相等,所有只能存在一个,不重复。
2.3 set的属性
size
:返回Set实例的成员总数。
2.4 set实例对象的方法
add(value)
:添加某个值,返回 Set 结构本身(可以链式调用)。delete(value)
:删除某个值,删除成功返回true
,否则返回false
。has(value)
:返回一个布尔值,表示该值是否为Set的成员。clear()
:清除所有成员,没有返回值。
2.5 遍历方法
keys()
:返回键名的遍历器。values()
:返回键值的遍历器。entries()
:返回键值对的遍历器。forEach()
:使用回调函数遍历每个成员。
由于Set
结构没有键名,只有键值(或者说键名和键值是同一个值),所以keys方法和values方法的行为完全一致。
2.6 set对象的作用
-
数组去重(利用扩展运算符)
-
合并两个set对象
let a = new Set([1, 2, 3])
let b = new Set([4, 3, 2])
let union = new Set([...a, ...b]
- 交集
let a = new Set([1, 2, 3])
let b = new Set([4, 3, 2])
let intersect = new Set([...a].filter(x => b.has(x)))
- 差集
let a = new Set([1, 2, 3])
let b = new Set([4, 3, 2])
let difference = new Set([...a].filter(x => !b.has(x))) // {1}