many-keys-map
    TypeScript icon, indicating that this package has built-in type declarations

    1.0.3 • Public • Published

    many-keys-map (size) (status)

    A Map subclass with support for multiple keys for one entry.

    A ManyKeysMap object is identical to a regular Map, which the exception that it only supports a sequence of keys as key, instead of a single key. This will let you attach a value to a specific combination of keys, instead of a single key.

    const regularMap = new Map();
    regularMap.set('hello', true);
     
    const manyKeysMap = new ManyKeysMap();
    manyKeysMap.set(['hello', 'world'], true);

    This is useful when the keys cannot be easily combined (i.e. object)

    const handlers = new ManyKeysMap();
    handlers.set([element, 'click'], onClickFn);
    handlers.set([element, 'keypress', {passive: true}], onKeypressFn);
    // Since objects are stored by reference, it’s best to stringify `options` object like the above
    handlers.set([element, 'keypress', JSON.stringify({passive: true})], onKeypressFn);

    The number of keys allowed is unlimited and their order matters.

    Install

    $ npm install many-keys-map
    

    Usage

    It should work exactly the same as a Map, except that the key must always be an array.

    const ManyKeysMap = require('many-keys-map');
     
    const groups = new ManyKeysMap();
    groups.set([header, 'admin'], true);
    groups.set([target, 'tools'], [1, 'any value is supported']);
     
    const data = new ManyKeysMap([
        [['hello key'], 'value'],
        [[42, null], new Date()]
    ]);
     
    data.get(['hello key']);
    // => 'value'
     
    data.get([42, null]);
    // => date Object
     
    data.get(['42']);
    // => undefined
     
    data.has([Symbol()]);
    // => false
     
    for (const [keys, value] of data) {
        console.log(keys);
        console.log(value);
    }
    // => ['hello key']
    // => 'value'
    // => [42, null]
    // => date Object

    Allowed keys

    1. Keys must always be an array, e.g. .set([a, b], 'hello')
    2. Only the values in the keys array are stored, not the array itself — so future changes to the array won’t be reflected in the map.
    3. ManyKeysMap supports any number of keys, any of these are valid and different: .get([a]) and .get([a, b, c, d, e, f, g])
    4. The order of keys matters, so .get([a, b]) is different from .get([b, a])
    5. The keys can be anything supported by Map.

    Related

    • many-keys-weakmap - A WeakMap subclass with support for multiple keys for one entry.

    Install

    npm i many-keys-map

    DownloadsWeekly Downloads

    1,111

    Version

    1.0.3

    License

    MIT

    Unpacked Size

    6.93 kB

    Total Files

    5

    Last publish

    Collaborators

    • fregante