如何在不调用API的情况下设计和实现ES6 Set新的Set()

时间:2018-06-02 23:24:48

标签: javascript ecmascript-6 set

我被问到一个如何在javascript中实现Set的问题,特别是如何设计一个在ES6中模拟Set的类。底层数据结构应该是什么?

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用Map

class Set {
    constructor(items) {
        this._map = new Map(Array.from(items, [v, true]));
    }

    get size() { 
        return this._map.size;
    }

    has(v) {
        this._map.has(v);
    }
    add(v) {
        this._map.set(v, true);
    }
    delete(v) {
        this._map.delete(v);
    }
    clear() {
        this._map.clear();
    }

    *entries() {
        for (const k of this._map.keys()) {
            yield [k, k];
        }
    }

    keys() {
        return this._map.keys();
    }
    values() {
        return this._map.keys();
    }
    forEach(cb, context) {
        for (const k of this._map.keys()) {
            cb.apply(context, k, k);
        }
    }

    [Symbol.iterator]() {
        return this.values();
    }
}