6-集合(第9章)
6.1集合
集合(set)是一种包含不同元素的数据结构。集合中的元素称为成员。集合的两个最重要特性是:
- 集合中的成员是无序的;
- 集合中不允许相同成员存在
6.1.1 集合的定义
- 不包含任何成员的集合称为空集, 全集则是包含一切可能成员的集合
- 如果两个集合的成员完全相同,则称两个集合相等
- 如果一个集合中所有的成员都属于另外一个集合,则前一集合称为后一集合的子集
6.1.2 集合的操作
- 并集:将两个集合中的成员进行合并,得到一个新集合
- 交集:两个集合中共同存在的成员组成一个新的集合
- 补集:属于一个集合而不属于另一个集合的成员组成的集合
6.2 集合的实现
原书中集合的实现使用的是数组,可能那时候还没有出来es6。现在es6已经出来了,集合Set变成js原生的数据结构。以下内容是我对es6集合的讲解。
6.2.1 创建一个集合
语法:
1 | new Set([iterable]) |
iterable 是一个可迭代对象,它的所有元素将不重复地被添加到新的 Set中。如果不指定此参数或其值为null,则新的 Set为空。
创建一个空的set
1 | const s1 = new Set() // Set(0) {} |
创建一个参数为可迭代对象的Set
1 | const s2 = new Set([1,2,3]) // Set(3) {1, 2, 3} |
6.2.2 Set中的值具有唯一性
Set中的每一个值都是唯一的,Set判断两个值是否相等使用类似===的比较方法,跟===不一样的地方是在集合里NaN是等于NaN的。而在===中,NaN是不等于NaN的
1 | console.log(NaN === NaN) // false |
6.2.3 Set的属性
- size:表示结合中成员的个数
1 | const s3 = new Set([NaN, NaN, 1, '1', +0, -0, true, true, false, false, undefined, null]) |
6.2.4 Set的方法
add(value)
: 添加某个值,返回添加值后新的Set。如果添加的值Set中已经存在,则返回的Set跟之前一样delete(value)
: 删除某个值,如果删除成功就返回true,否则返回falsehas(value)
:判断某个值是否在集合中,如果在就返回true,否则返回falseclear()
:清除所有成员,没有返回值keys()
:返回键名的遍历器values()
:返回键值的遍历器entries()
:返回键值对的遍历器forEach()
:使用回调函数遍历每个成员
需要特别指出的是,Set
的遍历顺序就是插入顺序。这个特性有时非常有用,比如使用 Set 保存一个回调函数列表,调用时就能保证按照添加顺序调用。
1 | const s2 = new Set([1, 2, 3]) |
1 | const s2 = new Set([1, 2, 3]) |
6.2.5 交集、并集和差集
1 | let a = new Set([1, 2, 3]); |
个人评价:关于集合大概也就这么多内容,集合还是蛮简单的