Skip to content

darky/indexable-map

Repository files navigation

indexable-map

NPM Version

Built-in JavaScript Map with secondary indexes

Example

import assert from 'node:assert'
import { IndexableMap } from 'indexable-map'

type Person = { age: number; firstName: string; lastName: string }
type Indexes = 'byYoungAge' | 'byOldAge'

const im = new IndexableMap<number, Person, Indexes>(
  [
    [1, { age: 30, firstName: 'Galina', lastName: 'Ivanova' }],
    [2, { age: 59, firstName: 'Zinaida', lastName: 'Petrovna' }],
    [3, { age: 17, firstName: 'Stepan', lastName: 'Lukov' }],
    [4, { age: 59, firstName: 'Ibragim', lastName: 'Lukov' }],
  ],
  {
    indexes: [
      {
        field: 'age',
        filter: ({ age }) => age >= 40,
        name: 'byOldAge',
      },
      {
        field: 'age',
        filter: ({ age }) => age < 40,
        name: 'byYoungAge',
      },
    ],
  }
)

assert.deepStrictEqual(im.getByIndex('byOldAge', 59), [
  {
    age: 59,
    firstName: 'Zinaida',
    lastName: 'Petrovna',
  },
  {
    age: 59,
    firstName: 'Ibragim',
    lastName: 'Lukov',
  },
])

assert.deepStrictEqual(im.getByIndex('byYoungAge', 30),
  [{ age: 30, firstName: 'Galina', lastName: 'Ivanova' }])

assert.deepStrictEqual(im.getByIndex('byYoungAge', 17),
  [{ age: 17, firstName: 'Stepan', lastName: 'Lukov' }])

assert.deepStrictEqual(im.getByIndex('byYoungAge', 59), [])

assert.deepStrictEqual(im.getByIndex('byOldAge', 17), [])

About

Built-in JavaScript Map with secondary indexes

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published