1234567891011121314151617181920212223242526272829303132333435 |
- // @flow strict
- import type { ObjMap } from './ObjMap';
- /**
- * Creates a keyed JS object from an array, given a function to produce the keys
- * for each value in the array.
- *
- * This provides a convenient lookup for the array items if the key function
- * produces unique results.
- *
- * const phoneBook = [
- * { name: 'Jon', num: '555-1234' },
- * { name: 'Jenny', num: '867-5309' }
- * ]
- *
- * // { Jon: { name: 'Jon', num: '555-1234' },
- * // Jenny: { name: 'Jenny', num: '867-5309' } }
- * const entriesByName = keyMap(
- * phoneBook,
- * entry => entry.name
- * )
- *
- * // { name: 'Jenny', num: '857-6309' }
- * const jennyEntry = entriesByName['Jenny']
- *
- */
- export default function keyMap<T>(
- list: $ReadOnlyArray<T>,
- keyFn: (item: T) => string,
- ): ObjMap<T> {
- return list.reduce((map, item) => {
- map[keyFn(item)] = item;
- return map;
- }, Object.create(null));
- }
|