Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

TypeScript implementation of Map and Set, with hash and equality functions.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages