Как спроектировать и внедрить ES6 Set без вызова API new Set () - PullRequest
0 голосов
/ 03 июня 2018

Мне задали вопрос, как реализовать Set в javascript, в частности, как разработать класс, который эмулирует Set в ES6.Какой должна быть базовая структура данных?

1 Ответ

0 голосов
/ 03 июня 2018

Самый простой способ - использовать 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();
    }
}
...