lookup
Version:
Transform a stream or array into a lookup object
48 lines (31 loc) • 2.07 kB
Markdown
# lookup
[](https://ci.testling.com/grncdr/js-lookup)
## API
### module.exports = function lookup (hash=pluck("id"), onCollision="last")
`lookup` creates a reducing function (suitable for passing to `Array.prototype.reduce` or [reducible](https://npm.im/reducible)) that builds a lookup table using the provided hash function. The function returned looks something like this:
```javascript
function reducer (mapping, object) {
mapping[hash(object)] = object
return mapping
}
```
#### Creating a lookup on a property.
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:
```javascript
function reducer (mapping, object) {
mapping[object['name']] = object
return mapping
}
```
#### Collision Handling
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.
### lookup.reduce(arr, hash=pluck("id"), onCollision="last")
A short-hand way of writing `arr.reduce(lookup(hash, onCollision), {})`.
### lookup.writableStream(hash=pluck("id"), onCollision="last", callback)
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.
## License
BSD (2 clause)