pointed-map

Find and filter through objects in maps faster using pointers/indexes

Usage no npm install needed!

<script type="module">
  import pointedMap from 'https://cdn.skypack.dev/pointed-map';
</script>

README

Pointed Map

The much faster way of filtering and finding objects through Maps

Implement with your project

npm i pointed-map --save

Initiation

const PointedMap = require('pointed-map');

// The properties that the pointed map should make pointers to
const map = new PointedMap(null, ['bar']);

// PointedMap extends Map, use anything as a key
// Values MUST be objects

const foo = {
    bar: 'Lorem'
};

map.set('anykey', foo);

// Returns the first matching value
map.getOneBy('bar', 'Lorem');

// Returns all matching values in an array
map.getBy('bar', 'Lorem');

// Returns all matching values in a new PointedMap
// with the same pointed properties
map.filterBy('bar', 'Lorem');

Good to know

  • getBy() and getOneBy() have the same speed

Usage

// Method 1:
const map = new PointedMap(null, ['bar']);

map.set('anykey', { foo: 'ipsum', bar: 'Lorem' });

// Method 2:
const entries = [
    // [ key, value ]
    ['anykey', { foo: 'ipsum', bar: 'Lorem' }]
];

const map = new PointedMap(entries, ['foo', 'bar']);

.getOneBy(property, value)

Arguments:

  • property: string
  • value: any

Returns: object || undefined

const got = map.getOneBy('bar', 'Lorem');
console.log(got.foo);

.getBy(property, value)

Arguments:

  • property: string
  • value: any

Returns: Array<object> || undefined

map.getBy('bar', 'Lorem').forEach(x => {
    console.log(x.foo);
});

.filterBy(property, value)

Arguments:

  • property: string
  • value: any

Returns: PointedMap<key, object>

Info: The property will not be pointed to in the returned PointedMap

getBy() will always be faster than filterBy()

const filtered = map.filterBy('bar', 'Lorem');
const got = filtered.getOneBy('foo', 'ipsum');
console.log(got);