// 集合的特点就是无须且不重复
// 它的基础操作有
// 1,添加
// 2,删除
// 3,判断是否存在
// 4,清空
// 5,返回集合长度
// 6,返回所有元素
// 常见的对集合的操作,空集,交集,并集,差集,子集
class MySet{
constructor(){
this.items = {}
}
// 1,添加
add(value){
if(!this.has(value)){
this.items[value] = value
return true
}
return false
}
// 2,删除
delete(value){
if(this.has(value)){
delete this.items[value]
return true
}
return false
}
// 3,判断是否存在
has(value){
return this.items.hasOwnProperty(value)
}
// 4,清空
clear(){
this.items = {}
}
// 5,返回集合长度
size(){
return Object.keys(this.items).length
}
// 6,返回所有元素
values(){
return Object.values(this.items)
}
// 并集
union(otherSet){
let unionSet = new MySet()
this.values().forEach(val => unionSet.add(val))
otherSet.values().forEach(val => unionSet.add(val))
return unionSet
}
// 交集
intersection(otherSet){
let intersection = new MySet()
this.values().forEach(val => {
if(this.has(val)) intersection.add(val)
})
return intersection
}
// 差集
difference(otherSet){
let difference = new MySet()
this.values().forEach(val => {
if(!otherSet.has(val)) difference.add(val)
})
return difference
}
// 子集
subset(otherSet){
return this.values().every(val => {
return otherSet.has(val)
})
}
}
//测试基础操作1~6
// let set = new MySet();
// set.add(1);
// console.log(set.values()); // [ 1 ]
// console.log(set.has(1)); // true
// console.log(set.size()); // 1
// set.add(2);
// console.log(set.values()); // [ 1, 2 ]
// console.log(set.has(2)); // true
// console.log(set.size()); // 2
// set.delete(1);
// console.log(set.values()); // [ 2 ]
// set.delete(2);
// console.log(set.values()); // []
// 常见的对集合的操作,空集,交集,并集,差集,子集
// 并集测试
// function union(otherSet){
// let unionSet = new MySet()
// this.values().forEach(val => unionSet.add(val))
// otherSe.values().forEach(val => unionSet.add(val))
// return unionSet
// }
// let setA = new MySet();
// setA.add("first");
// setA.add("second");
// setA.add("third");
// let setB = new MySet();
// setB.add("third");
// setB.add("fourth");
// setB.add("fifth");
// setB.add("sixth");
// console.log(setA.union(setB).values()); // [ 'first', 'second', 'third', 'fourth', 'fifth', 'sixth' ]
// 交集测试
// let setA = new MySet();
// setA.add("first");
// setA.add("second");
// setA.add("third");
// let setB = new MySet();
// setB.add("second");
// setB.add("third");
// setB.add("fourth");
// console.log(setA.intersection(setB).values()); // [ 'second', 'third' ]
// 差集测试
// let setA = new MySet();
// setA.add("first");
// setA.add("second");
// setA.add("third");
// let setB = new Set();
// setB.add("second");
// setB.add("third");
// setB.add("fourth");
// console.log(setA.difference(setB).values()); // [ 'first' ]
// 子集测试
let setA = new MySet();
setA.add("first");
setA.add("second");
let setB = new MySet();
setB.add("first");
setB.add("second");
setB.add("third");
let setC = new MySet();
setC.add("second");
setC.add("third");
setC.add("fourth");
console.log(setA.subset(setB)); // true
console.log(setA.subset(setC)); // false
console