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.
36 lines
804 B
36 lines
804 B
/** |
|
* 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. |
|
* ```ts |
|
* const phoneBook = [ |
|
* { name: 'Jon', num: '555-1234' }, |
|
* { name: 'Jenny', num: '867-5309' } |
|
* ] |
|
* |
|
* const entriesByName = keyMap( |
|
* phoneBook, |
|
* entry => entry.name |
|
* ) |
|
* |
|
* // { |
|
* // Jon: { name: 'Jon', num: '555-1234' }, |
|
* // Jenny: { name: 'Jenny', num: '867-5309' } |
|
* // } |
|
* |
|
* const jennyEntry = entriesByName['Jenny'] |
|
* |
|
* // { name: 'Jenny', num: '857-6309' } |
|
* ``` |
|
*/ |
|
export function keyMap(list, keyFn) { |
|
const result = Object.create(null); |
|
|
|
for (const item of list) { |
|
result[keyFn(item)] = item; |
|
} |
|
|
|
return result; |
|
}
|
|
|