文章目录
- 一、什么是集合?
- 1.1 集合的常见方法
- 1.2 常见方法的实现
- 二、集合间的操作
- 2.1 集合间的常见操作
- 2.2 并集 返回一个包含两个集合所有元素的集合
- 2.3 交集 集合A中的元素同时存在于集合B中
- 2.4 差集 存在于A中,不存在于B中
- 3.2 子集 A中的每一个元素都存在于B
一、什么是集合?
1.1 集合的常见方法
1.2 常见方法的实现
function Set() {
// 属性
this.items = {}
// 方法
// 1.add 向集合添加一个新的项
Set.prototype.add = function (value) {
// 判断当前集合中是否已经包含了该元素
if (this.has(value)) return false
// 将元素添加到集合中
this.items[value] = value
return true
}
// 2.has 判断值是否在集合中
Set.prototype.has = function (value) {
// 判断某个对象是否含有指定的属性
return this.items.hasOwnProperty(value)
}
// 3.remove(remove) 删除指定的元素
Set.prototype.remove = function (value) {
// 1.判断是否包含要删除的元素
if(!this.has(value)) return false
// 2.将元素从属性中删除
delete this.items[value]
return true
}
// 4.clear 清空
Set.prototype.clear = function (){
this.items = {}
}
// 5.size方法 获取集合中的元素个数
Set.prototype.size = function (){
return Object.keys(this.items).length
}
// 6.values 获取集合中所有的值
Set.prototype.values = function (){
return Object.keys(this.items)
}
}
测试代码:
// 测试
let set = new Set()
// 1.测试add
console.log(set.add('a'));
console.log(set.add('a'));
console.log(set.add('b'));
console.log(set.add('c'));
// 2.测试 values
console.log(set.values());
// 3.测试 remove
console.log(set.remove('c'));
console.log(set.remove('c'));
// 4.测试size
console.log(set.size());
// 5.测试 has
console.log(set.has('a'));
// 6.测试 clear
console.log(set.values())
console.log(set.clear());
console.log(set.values())
测试结果:
二、集合间的操作
2.1 集合间的常见操作
2.2 并集 返回一个包含两个集合所有元素的集合
// 1.并集
Set.prototype.union = function (otherSet) {
// this:集合对象A
// otherSet:集合对象B
// 1.创建一个新的集合
let unionSet = new Set()
// 2.将A集合中所有元素添加到新集合中
let values = this.values()
for (let i = 0; i < values.length; i++) {
unionSet.add(values[i])
}
// 3.取出B集合中的元素,判断是否需要加入到新集合
values = otherSet.values()
for (let i = 0; i < values.length; i++) {
unionSet.add(values[i])
}
return unionSet
}
测试代码:
// 1.创建两个集合,并且添加元素
let setA = new Set()
setA.add('a')
setA.add('b')
setA.add('c')
let setB = new Set()
setB.add('aa')
setB.add('bb')
setB.add('c')
// 1.求两个集合的并集
console.log('求并集:=》', setA.union(setB));
测试结果:
2.3 交集 集合A中的元素同时存在于集合B中
// 2.交集
Set.prototype.intersection = function (otherSet) {
// this:集合A
// otherSet:集合B
// 1.先创建一个新的集合
let intersectionSet = new Set()
// 2.从A中取出一个个元素,判断是否同时存在于集合B,是则存放入新集合
let values = this.values()
for (let i = 0; i < values.length; i++) {
let item = values[i]
if (otherSet.has(item)) {
intersectionSet.add(item)
}
}
return intersectionSet
}
测试代码:
// 1.创建两个集合,并且添加元素
let setA = new Set()
setA.add('a')
setA.add('b')
setA.add('c')
let setB = new Set()
setB.add('aa')
setB.add('bb')
setB.add('c')
// 2.求交集
console.log('求交集:=》',setA.intersection(setB));
测试结果:
2.4 差集 存在于A中,不存在于B中
Set.prototype.difference = function (otherSet) {
// this:集合A
// otherSet:集合B
// 1.创建一个新的集合
let differenceSet = new Set()
// 2.取出A中的一个个元素,判断是否存在于B中,不存在,则添加到新集合中
let values = this.values()
for (let i = 0; i < values.length; i++) {
let item = values[i]
if (!otherSet.has(item)) {
differenceSet.add(item)
}
}
return differenceSet
}
测试代码:
// 1.创建两个集合,并且添加元素
let setA = new Set()
setA.add('a')
setA.add('b')
setA.add('c')
let setB = new Set()
setB.add('aa')
setB.add('bb')
setB.add('c')
// 3.求差集
console.log('求差集:=》', setA.difference(setB));
测试结果:
3.2 子集 A中的每一个元素都存在于B
// 4.子集
Set.prototype.subset = function (otherSet) {
// 遍历集合A中的所有元素,如果都存在于B中,则返回true,
// 只要有不存在于B中的,则放回false
let values = this.values()
for (let i = 0; i < values.length; i++) {
let item = values[i]
if (!otherSet.has(item)) {
return false
}
return true
}
}
测试代码:
// 1.创建两个集合,并且添加元素
let setA = new Set()
setA.add('a')
setA.add('b')
setA.add('c')
let setB = new Set()
setB.add('aa')
setB.add('bb')
setB.add('c')
let setC = new Set()
setC.add('a')
setC.add('b')
setC.add('c')
setC.add('d')
// 4.子集
console.log('求子集:=》', setA.subset(setB)); // A是不是B的子集
console.log('求子集:=》', setA.subset(setC)); // A是不是C的子集
测试结果: