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 value -
hasValue(value)
- Check if the map contains a value -
deleteValue(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.