diff --git a/snippets/indexBy.md b/snippets/indexBy.md new file mode 100644 index 000000000..507ea52a0 --- /dev/null +++ b/snippets/indexBy.md @@ -0,0 +1,26 @@ +--- +title: indexBy +tags: array,object,intermediate +firstSeen: 2021-06-20T05:00:00-04:00 +--- + +Creates an object from an array, using a function to map each value to a key. + +- Use `Array.prototype.reduce()` to create an object from `arr`. +- Apply `fn` to each value of `arr` to produce a key and add the key-value pair to the object. + +```js +const indexBy = (arr, fn) => + arr.reduce((obj, v, i) => { + obj[fn(v, i, arr)] = v; + return obj; + }, {}); +``` + +```js +indexBy([ + { id: 10, name: 'apple' }, + { id: 20, name: 'orange' } +], x => x.id); +// { '10': { id: 10, name: 'apple' }, '20': { id: 20, name: 'orange' } } +```