lookup

Transform a stream or array into a lookup object

lookup

lookup creates a reducing function (suitable for passing to Array.prototype.reduce or reducible) that builds a lookup table using the provided hash function. The function returned looks something like this:

function reducer (mappingobject) {
  mapping[hash(object)] = object
  return mapping
}

When the hash parameter is a string, the corresponding property name will be used as the hash value of each object. E.g. lookup('name') will return a hash function something like this:

function reducer (mappingobject) {
  mapping[object['name']] = object
  return mapping
}

The second parameter to lookup determines what happens when two objects have the same hash value. There are currently 4 options:

  • 'last' - This is the default. If an object hashes to a key that is already used, the old value is overwritten.
  • 'first' - The opposite of 'last'. If an object hashes to a key that is already used, the new value is discarded.
  • 'array' - Keep all values for each object in the order they appeared. The values in the final mapping will alway be arrays.
  • 'concat' - Keep all values for each object in the order they appeared. If a key was only seen once, it won't be wrapped in an array.

A short-hand way of writing arr.reduce(lookup(hash, onCollision), {}).

Returns a writable stream that will use the reducer function to aggregate objects written to it into a single mapping. While the first two arguments are optional a callback must be provided. The callback will be called with the complete lookup table when the source stream ends.

BSD (2 clause)