集合
是什么
集合是由一组无序且唯一(即不能重复)的项组成的。也可以将集合看成一个既没有重复元素,也没有顺序概念的数组。
怎么做
class Set{
constructor(){
this.items = {}
}
// 查:查看自身属性items是否存在value
has(value){
return this.items.hasOwnProperty(value)
}
// 查:获取长度
size(){
return Object.keys(this.items).length
}
// 查:获取全部值
values(){
return Object.keys(this.items)
}
// 增:添加数据
add(value){
// 添加之前先检查是否已经存在
if(!this.has(value)){
this.items[value] = value
return true
}
return false
}
// 删:删除指定数据
remove(value){
// 添加之前先检查是否已经存在
if(this.has(value)){
delete this.items[value]
return true
}
return false
}
// 删:清空数据
clear(){
return this.items = {}
}
// 并集:返回一个包含两个集合中所有元素的新集合。
union(otherSet){
let unionSet = new Set()
for(let key of this.values()){
unionSet.add(key)
}
for(let key of otherSet.values()){
unionSet.add(key)
}
return unionSet
}
// 交集:对于给定的两个集合,返回一个包含两个集合中共有元素的新集合。
intersection(otherSet){
let unionSet = new Set()
for(let value of otherSet.values()){
if(this.has(value)){
unionSet.add(value)
}
}
return unionSet
}
// 差集:对于给定的两个集合,返回一个包含所有存在于第一个集合且不存在于第二个集合的元素的新集合。
difference(otherSet){
let unionSet = new Set()
for(let value of this.values()){
if(!otherSet.has(value)){
unionSet.add(value)
}
}
return unionSet
}
// 子集:验证一个给定的集合是否是另一个集合的子集。
subset(otherSet){
if(this.size() > otherSet.size()){
return false
}else{
for(let value of this.values()){
if(!otherSet.has(value)){
return false
}
}
return true
}
}
}
使用方法:
// let set = new Set()
// set.add(1)
// set.add(2)
// set.add(3)
// set.remove(2)
// console.log(set.size()) // 1
// console.log(set.values())
let setA = new Set();
setA.add(1);
setA.add(2);
setA.add(3);
let setB = new Set();
setB.add(1);
setB.add(2);
setB.add(3);
setB.add(4);
// console.log(setA.union(setB))
// console.log(setA.intersection(setB))
// console.log(setA.difference(setB))
console.log(setA.subset(setB))