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.
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.

```
npm install @viarationis/bidirectional-map
`js
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'
`
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 of get(key)hasKey(key)
- - Alias of has(key)deleteKey(key)
- - Alias of delete(key)`
Released under the CC0-1.0 License.