0.0.3 • Published 3 years ago

map-and-set v0.0.3

Weekly downloads
2
License
MIT
Repository
github
Last release
3 years ago

map-and-set

This package provides Map and Set implementations that have very similar API to ECMAScript's Map and Set.

Unlike ECMAScript's ones, they have hash and equality functions. You can use objects for keys of Map and values of Set without worrying about objects' identity.

Implementations of Map and Set are inspired by an article: [V8 Deep Dives] Understanding Map Internals | by Andrey Pechkurov | ITNEXT. Thanks Andrey.

Install

You can install it with npm.

npm install map-and-set

Example

import { Map, Set, makeHashAndEqualFunction } from 'map-and-set'

interface User {
  id: number
  name: string
}

const map = new Map<User, number>(null, {
  hash: (user) => user.id,
  equal: (user1, user2) => user1.id === user2.id
})

// You can write shortly with utility function
const map_ = new Map<User, number>(
  null,
  makeHashAndEqualFunction((user) => [user.id])
)

map.set({ id: 1, name: 'Tom' }, 99)
map.set({ id: 2, name: 'Michael' }, 100)

map.get({ id: 1, name: 'Tom' }) // => 99
map.has({ id: 1, name: 'Tom' }) // => true
map.has({ id: 1, name: 'Unknown' }) // => true
map.has({ id: 3, name: 'Tom' }) // => false

map.delete({ id: 1 })
map.has({ id: 1, name: 'Tom' }) // => false

const set = new Set<User>(
  null,
  makeHashAndEqualityFunction((user) => [user.id])
)

set.add({ id: 10, name: 'Tomoko' })
set.add({ id: 11, name: 'Yuya' })

set.has({ id: 10, name: 'Tomoko' }) // => true
set.has({ id: 10, name: 'Unknown' }) // => true
set.has({ id: 11, name: 'Yuya' }) // => true
set.has({ id: 99, name: 'Unknown' }) // => false

set.delete({ id: 11, name: 'Yuya' })
set.has({ id: 11, name: 'Yuya' }) // => false

License

MIT

0.0.3

3 years ago

0.0.2

3 years ago

0.0.1

3 years ago