set
概念:
区别:array是一个索引集合, set是一个键的集合。
基础API
去重
格式转换
创建set
// 复制
new Set(setA)
// array转set
new Set([1, 2, 3])
Set(3) {1, 2, 3}
// string转set
new Set('hello')
Set(4) {'h', 'e', 'l', 'o'}
转array
// 转array
let setC = new Set([3, 4, 5, 6])
[...setC]
(4) [3, 4, 5, 6]
let setC = new Set([3, 4, 5, 6])
Array.from(setC)
(4) [3, 4, 5, 6]
转string
// 转string
可包含的元素数据类型
集合计算
子集 subset
如果集合A的任意一个元素都是集合B的元素,那么集合A称为集合B的子集。 符号语言:若∀a∈A,均有a∈B,则A⊆B
超集 superset
如果一个集合S2中的每一个元素都在集合S1中,且集合S1中可能包含S2中没有的元素,则集合S1就是S2的一个超集,反过来,S2是S1的子集。 S1 ⊇ S2
function isSuperset(set, subset) {
for (let elem of subset) {
if (!set.has(elem)) {
return false;
}
}
return true;
}
并集union
给定两个集合A,B,把他们所有的元素合并在一起组成的集合,叫做集合A与集合B的并集,记作A∪B,读作A并B。
// 方式一
new Set(setA, setB)
Set(4) {1, 2, 3, 4}
//
function union(setA, setB) {
let _union = new Set(setA);
for (let elem of setB) {
_union.add(elem);
}
return _union;
}
交集 intersection
集合论中,设A,B是两个集合,由所有属于集合A且属于集合B的元素所组成的集合,叫做集合A与集合B的交集,记作A∩B。
function intersection(setA, setB) {
let _intersection = new Set();
for (let elem of setB) {
if (setA.has(elem)) {
_intersection.add(elem);
}
}
return _intersection;
}
差集
对于给定的两个集合,返回一个包含所有存在于第一个集合且不存在于第二个集合的元素的新集合
function difference(setA, setB) {
let _difference = new Set(setA);
for (let elem of setB) {
_difference.delete(elem);
}
return _difference;
}
对称差集
集合A与集合B中所有不属于A∩B的元素的集合,记为A△B
function symmetricDifference(setA, setB) {
let _difference = new Set(setA);
for (let elem of setB) {
if (_difference.has(elem)) {
_difference.delete(elem);
} else {
_difference.add(elem);
}
}
return _difference;
}
补集
补集一般指绝对补集,即一般地,设S是一个集合,A是S的一个子集,由S中所有不属于A的元素组成的集合,叫做子集A在S中的绝对补集
相等判断
isEqual
isStrictEqual
上一篇:[p1]this指向问题