You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Sven Slootweg 90c3a2a083 Initial commit; v1.0.0 1 year ago Initial commit; v1.0.0 1 year ago
example.js Initial commit; v1.0.0 1 year ago
index.js Initial commit; v1.0.0 1 year ago
package.json Initial commit; v1.0.0 1 year ago


Generates a (fast!) lookup table or index from any array of items.

When to use this: When you might otherwise be looping through an array many times (eg. using Array#find), trying to locate an item(s) with a particular property.

If you'd otherwise only loop through the array once, it's probably faster not to use this library, and just do the loop - building a lookup table, while still quite fast in the bigger picture, takes time.

License, donations, and other boilerplate

Licensed under either the WTFPL or CC0, at your choice. In practice, that means it's more or less public domain, and you can do whatever you want with it. Giving credit is not required, but still very much appreciated! I'd love to hear from you if this module was useful to you.

Creating and maintaining open-source modules is a lot of work. A donation is also not required, but much appreciated! You can donate here.


"use strict";

const generateLookupTable = require("generate-lookup-table");

// Thanks to for the sample data!

let items = [
	{ name: "Eloquent JavaScript, Second Edition", tags: [ "javascript", "No Starch Press" ] },
	{ name: "Learning JavaScript Design Patterns", tags: [ "javascript", "O'Reilly Media" ] },
	{ name: "Speaking JavaScript", tags: [ "javascript", "O'Reilly Media" ] },
	{ name: "Programming JavaScript Applications", tags: [ "javascript", "O'Reilly Media" ] },
	{ name: "Understanding ECMAScript 6", tags: [ "javascript", "No Starch Press" ] },
	{ name: "You Don't Know JS", tags: [ "javascript", "O'Reilly Media" ] },
	{ name: "Git Pocket Guide", tags: [ "git", "O'Reilly Media" ] },
	{ name: "Designing Evolvable Web APIs with ASP.NET", tags: [ "", "O'Reilly Media" ] },

let lookupTable = generateLookupTable(items, (item) => item.tags);


/* Output:
	[ { name: 'Git Pocket Guide', tags: [ 'git', 'O\'Reilly Media' ] } ]

console.log(lookupTable.get("No Starch Press"));

/* Output:
	[ { name: 'Eloquent JavaScript, Second Edition',
		tags: [ 'javascript', 'No Starch Press' ] },
	{ name: 'Understanding ECMAScript 6',
		tags: [ 'javascript', 'No Starch Press' ] } ]


generateLookupTable(items, keyFunction)

Generates a lookup table for the given set of items, using the keyFunction to determine what key(s) each item should be registered for.

  • items: The array of items to index.
  • keyFunction(item): A function that, given an item as its argument, returns the key(s) for that item. The function may return either a single key, an array of them, or nothing at all.

Returns a Map that maps from a key (as returned from the keyFunction) to all items that returned that particular key.


v1.0.0 (February 21, 2020)

Initial release.