Skip to content

WeakMap with support for shallow equal arrays as keys

Notifications You must be signed in to change notification settings

raineorshine/weak-array-map

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WeakArrayMap is a 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

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

About

WeakMap with support for shallow equal arrays as keys

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published