https://github.com/raineorshine/weak-array-map
WeakMap with support for shallow equal arrays as keys
https://github.com/raineorshine/weak-array-map
weakmap
Last synced: 3 months ago
JSON representation
WeakMap with support for shallow equal arrays as keys
- Host: GitHub
- URL: https://github.com/raineorshine/weak-array-map
- Owner: raineorshine
- Created: 2021-08-29T16:00:35.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2021-08-29T16:03:50.000Z (almost 4 years ago)
- Last Synced: 2025-03-10T15:09:33.498Z (3 months ago)
- Topics: weakmap
- Language: JavaScript
- Homepage:
- Size: 1.95 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
**WeakArrayMap** is a [WeakMap](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap) that treats different array instances that have the same items as equal keys (shallowEqual).
Values are set and retrieved in O(arr.length).
Useful for memoizing multiple arguments without losing WeakMap support.
## Installation
```
npm install weak-array-map
```## Usage
```js
const a = { 'a': 1 }
const b1 = { 'b': 1 }
const b2 = { 'b': 2 }// new arrays create different entries in regular WeakMap
const weakMap = new WeakMap()
weakMap.set([a, b1], 'hello')
assert.notStrictEqual(weakMap.get([a, b1]), 'hello') // CACHE MISS// new arrays do not affect caching in WeakArrayMap
const weakArrayMap = new WeakArrayMap()
weakArrayMap.set([a, b1], 'hello')
assert.strictEqual(weakArrayMap.get([a, b1]), 'hello') // CACHE HIT// works with memoized arguments
const sum = ({ a }, { b }) => ({ a: a + 1, b: b + 1 })
const memoized = memoize(sum)assert.deepStrictEqual(memoized(a, b1), { a: 2, b: 2 })
assert.deepStrictEqual(memoized(a, b2), { a: 2, b: 3 })
assert.strictEqual(memoized(a, b1), memoized(a, b1))
assert.strictEqual(memoized(a, b2), memoized(a, b2))
```## API
**constructor**
```
new WeakMap()
```**set: (arr, value) => void**
Sets a value at the given shallow-equal array key.
**get: (arr) => any**
Returns the value at the given shallow-equal array key.
**has: (arr) => boolean**
Returns true if there is a value stored at the given shallow-equal array key.
## Limitations
- Does not support primitive array items