JSFiddle - React, Tailwind, and code Playground

by belorion

JavaScript

// A hash whose values disappear after a while
var FadingHash = (function () {
    var fadingHash = function (opts) {
        var self = this;
        var hash = {};
        var timestamp = {};

        opts = opts || {};
        var lifetime = opts.lifetime || 10 * 1000; // seconds
        var onNewCallback = opts.onNewCallback;

        this.get = function (key) {
            if (key in timestamp === false) { return undefined; }

            var time = timestamp[key];
            var now = new Date();
            if (now - time > lifetime) {
                delete hash[key];
                delete timestamp[key];
            }

            return hash[key];
        };

        this.set = function (key, value) {
            // trigger lazy removal
            self.get(key);

            var isNew = false;
            if (key in hash === false) {
                isNew = true;
            }

            hash[key] = value;
            timestamp[key] = new Date();

            if (isNew && onNewCallback !== undefined) {
                onNewCallback(key, value);
            }
        };
    };

    return fadingHash;
})();



var notify = function(){ console.log('new3!'); }
    var f = new FadingHash({lifetime: 5000, onNewCallback: notify});

f.set(1, 2);
f.set(1, 2);
setTimeout(function(){ f.set(1,2);}, 6500);