ES6 Set集合实现

class FakeSet {
    constructor(arr=[]) {
        this.items = {};
        this.size = 0;
        arr.forEach((item) => {
            this.add(item);
        })
    }
    has(val) {
        return this.items.hasOwnProperty(val);
    }
    add(val) {
        if (!this.has(val)) {
            this.items[val] = val;
            this.size++ ;
            return true;
        } else {
            return false;
        }
    }
    delete(val) {
        if (this.has(val)) {
            Reflect.deleteProperty(this.items, val);
            this.size--;
            return true;
        } else {
            return false;
        }
    }
    clear() {
        this.items = {};
        this.size = 0;
    }
    keys() {
        return Object.keys(this.items);
    }
    values() {
        return Object.values(this.items);
    }
    forEach(fn, context) {
        for (let i = 0; i<this.size; i++) {
            let key = Object.keys(this.items)[i];
            Reflect.apply(fn, context, [key, this.items[key]])
        }
    }
    union(other) {
        let union = new FakeSet();
        let values = this.values();
        values.forEach(item => {
            union.add(item);
        });
        let otherValues = other.values();
        otherValues.forEach(item => {
            union.add(item);
        });
        return union;
    }
    intersect(other) {
        let intersect = new FakeSet();
        let values = this.values();
        values.forEach(item => {
            if (other.has(item)) {
                intersect.add(item);
            }
        });
        return intersect;
    }
    difference(other) {
        let difference = new FakeSet();
        let values = this.values();
        values.forEach(item => {
            if (!other.has(item)) {
                difference.add(item);
            }
        });
        return difference;
    }
    subset(other) {
        if (this.size > other.size) {
            return false;
        } else {
            let values = this.values;
            values.forEach(item => {
                if (!other.has(item)) {
                    return false;
                }
            })
            return true;
        }
    }
}

let set = new FakeSet([5, 6, 7, 1]);
set.add(1);
set.add(4);
set.add('3')
set.forEach((key, value) => {
    console.log(key + ':' + value);
});
console.log(set.values());
console.log(set.union(new FakeSet([1, 2, 3, 4])))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值