npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

injective-map

v1.0.0

Published

An one-to-one map with unique keys and values

Downloads

7

Readme

injective-map

injective-map implements a 1-to-1 map-like object with unique keys and values. This is useful if you need to ensure that each value only occurs exactly once. It is compatible with the standard Map type but also provides additional methods for finding the key for a particular value or deleting a value from the map.

Install

# If you use npm
npm install injective-map

# If you use yarn
yarn add injective-map

Usage

import { InjectiveMap, InjectiveMapLike } from "injective-map";

// injective-map provides a class `InjectiveMap<K, V>`
const injectiveMap = new InjectiveMap<string, number>();

// injective-map also provides an interface, `InjectiveMapLike<K, V>` that the class implements
const injectiveMapLike: InjectiveMapLike<string, number> = injectiveMap;

// You can also specify some configuration options when instantiating the `InjectiveMap`
const anotherInjectiveMap = new InjectiveMap<string, number>({
  // `entries` can be used to specify initial entries that the map is instantiated with
  // You can specify it as an array of key-value pairs, another Map object or as a plain object (provided your key type)
  entries: [["zero", 0], ["one", 1]],
  // `keyToValueMap` can be used to specify a custom Map-like object for storing the key to value map
  keyToValueMap: new Map<string, number>(),
  // `valueToKeyMap` can be used to specify a custom Map-like object for storing the value to key map
  valueToKeyMap: new Map<number, string>(),
});

// You can use `set` to set a key-value pair
injectiveMap.set("a", 0)
// injectiveMap = { "a": 0 }

// Like a normal map, if you `set` the same key, the value is overwritten
injectiveMap.set("a", 1)
// injectiveMap = { "a": 1 }

// Unlike a normal map, if you `set` the another key with a value that is already in use, the old key is removed
injectiveMap.set("b", 1)
// injectiveMap = { "b": 1 }

injectiveMap.set("c", 2)
// injectiveMap = { "b": 1, "c": 2 }

// You can check if the map has a certain key using `hasKey` or just `has` like in a normal map
injectiveMap.hasKey("b")
// true
injectiveMap.has("a")
// false

// You can check if the map has a certain value using `hasValue`
injectiveMap.hasValue(1)
// true
injectiveMap.hasValue(0)
// false

// You can get the value corresponding to a key with `getValue` or just `get` like in a normal map
injectiveMap.getValue("b")
// 1
injectiveMap.get("a")
// undefined

// You can get the key corresponding to a value with `getKey`
injectiveMap.getKey(1)
// "b"
injectiveMap.getKey(0)
// undefined

// You can delete a key using `deleteKey` or just `delete` like in a normal map
injectiveMap.deleteKey("b")
// true
// injectiveMap = { "c": 2 }
injectiveMap.delete("a")
// false
// injectiveMap = { "c": 2 }

// You can also delete by `value` using `deleteValue`
injectiveMap.deleteValue(2)
// true
// injectiveMap = {}

License

MIT