SOURCE

// 集合的特点就是无须且不重复
// 它的基础操作有
// 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 命令行工具 X clear

                    
>
console