@viarationis/bidirectional-map
v1.0.1
Published
Map, but extended to be bidirectional. Values will stay unique by deleting previous keys. Also a 'strict' version, which throws on duplicates instead, and a 'silent' version, which ignores assignments of existing values.
Downloads
26
Maintainers
Readme
Bidirectional Map
This module provides BidirectionalMap, StrictBidirectionalMap, and SilentBidirectionalMap classes which extend the built-in JavaScript Map to additionally allow accessing keys from their values.
BidirectionalMap
links keys and values in both directions. Looking up by key returns the value, looking up by value returns the key.- Values stay unique - assigning an existing value to a new key will delete the old key.
StrictBidirectionalMap
instead throws an error if you try to assign an existing value to a new key.SilentBidirectionalMap
will instead ignore/no-op if you try to assign an existing value to a new key.
Installation
npm install @viarationis/bidirectional-map
Usage
import BidirectionalMap from '@viarationis/bidirectional-map';
const map = new BidirectionalMap();
map.set('key1', 'value1');
map.has('key1'); // true
map.hasValue('value1'); // true
map.get('key1'); // 'value1'
map.getKey('value1'); // 'key1'
map.set('key2', 'value1'); // Deletes 'key1' and remaps 'value1' to 'key2'
map.deleteValue('value1'); // Deleted 'key2' and the map is now empty
import { StrictBidirectionalMap, SilentBidirectionalMap } from '@viarationis/bidirectional-map';
const mapStrict = new StrictBidirectionalMap();
mapStrict.set('key1', 'value1');
mapStrict.set('key2', 'value1'); // Throws error: "Cannot set duplicate value on StrictBidirectionalMap: value1"
const mapSilent = new SilentBidirectionalMap();
mapSilent.set('key1', 'value1');
mapSilent.set('key2', 'value1'); // Does nothing, 'value1' is still mapped to 'key1'
API
The maps provide the following methods in addition to the standard Map API:
getKey(value)
- Get the key for a valuehasValue(value)
- Check if the map contains a valuedeleteValue(value)
- Delete a value and its key
To help avoid ambiguity, these aliases of standard Map methods are also provided:
getValue(key)
- Alias ofget(key)
hasKey(key)
- Alias ofhas(key)
deleteKey(key)
- Alias ofdelete(key)
License
Released under the CC0-1.0 License.