JSFiddle - React, Tailwind, and code Playground

JavaScript

const count = (() => {
    const map = new Map();
    return x => {
        map.set(x, (map.get(x) || 0) + 1);
        return map.get(x);
    }
})();

const range = function*(start, end, step) {
    for (let i = start; i < end; i += step) {
        yield i;
    }
    for (let i = start; i > end; i += step) {
        yield i;
    }
}

class IterableWeakSet extends WeakSet {
    constructor() {
        super();
        this.set = new Set();
    }

    add(obj) {
        super.add(obj);
        this.set.add(new WeakRef(obj));
    }

    *[Symbol.iterator]() {
        for (const weakRef of this.set) {
            const obj = weakRef.deref();
            if (obj) {
                yield obj;
            }
            else {
                this.set.delete(weakRef);
            }
        }
    }
}