No Description

Sven Slootweg 90c3a2a083 Initial commit; v1.0.0 4 months ago
README.md 90c3a2a083 Initial commit; v1.0.0 4 months ago
example.js 90c3a2a083 Initial commit; v1.0.0 4 months ago
index.js 90c3a2a083 Initial commit; v1.0.0 4 months ago
package.json 90c3a2a083 Initial commit; v1.0.0 4 months ago

README.md

generate-lookup-table

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.

Usage

"use strict";

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

// Thanks to https://gist.github.com/nanotaboada/6396437 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: [ "asp.net", "O'Reilly Media" ] },
];

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

console.log(lookupTable.get("git"));

/* 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' ] } ]
*/

API

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.

Changelog

v1.0.0 (February 21, 2020)

Initial release.