JS版数据结构-集合
一、集合
01.集合简介
集合是无序且唯一的数据结构,可以把集合想象成一个既没有重复元素,也没有顺序概念的数组。
JS中没有集合这个数据结构。
ES6 中的数据结构 Set,每个成员的值都是唯一的,且没有重复的值,正好满足集合的定义。我们可以用Set模拟集合的数据结构。
首先介绍下es6的数据结构Set。
二、Set
01. Set简介
Set对象是值的集合,你可以按照插入的顺序迭代它的元素。
Set中的元素只会出现一次,即 Set 中的元素是唯一的。
Set本身是一个构造函数
const set = new Set();
02. Set常用属性
size:
含义:返回Set对象中元素的个数
const set = new Set();
set.add(1).add(2).add(3);
console.log(set.size) // 3
03. Set常用方法
01. add
add()
含义:添加值
返回:Set 结构本身
const set = new Set();
02. delete
delete()
含义:删除值
返回:布尔值,表示删除是否成功
set.delete(2) // 删除 set 结构中的2值
03. has
has()
含义:是否存在某个值
返回:返回一个布尔值,表示该值是否为 Set 的成员
const c = set.has(1) // 表示 set 结构中是否有1这个值 返回布尔值
04. clear
clear()
含义:清空所有值
返回:无
set.clear()
05. values
values()
含义:按照元素插入顺序返回一个具有 Set 对象每个元素值的全新 Iterator 对象。
const set = new Set();
06. forEach
forEach()
含义:遍历
set.forEach(value => {
三、用set模拟集合的运算
常用的集合运算有:并集,交集,差集,子集
const set1 = new Set();
我们新创建2个set结构,set1中存储为a,b,c,set1中存储为d,e,a
01. 并集
并集:
含义:对于给定的两个集合,返回一个包含两个集合中所有元素的新集合。
const set3 = new Set()
set1.forEach(value => {
set3.add(value)
})
set2.forEach(value => {
set3.add(value)
})
console.log(set3) // {"a", "b", "c", "d", "e"}
使用forEach依次遍历元素添加到新的集合中。
02. 交集
交集:
含义:对于给定的两个集合,返回一个包含两个集合中共有元素的新集合。
const set3 = new Set([...set1].filter(item => set2.has(item)))
使用数组的filter方法筛选出set2中存在的值和set1对比。
03. 差集
差集:
含义:对于给定的两个集合,返回一个包含所有存在于第一个集合且不存在于第二个集合的元素的新集合。
const set3 = new Set([...set1].filter(item => !set2.has(item)))
对于差集有两种情况,存在set1中但是不存在set2的值,和存在set2中但是不存在set1的值。
04. 子集
子集:
含义:验证一个给定集合是否是另一集合的子集
const set3 = [...set1].every(item => {set2.has(item)})
every方法可以测试一个数组内的所有元素是否都能通过某个指定函数的测试,此时可以检测set2的元素是否在set1存在,还有另外一个条件,set1的size应该大于set2.size。
思考:
用两个圆如何模拟集合运算?
image查看更多