From 82cdd260c97f51bceec5dbd027b8c83986da4ab2 Mon Sep 17 00:00:00 2001 From: Chalarangelo Date: Fri, 18 Jun 2021 21:17:42 +0300 Subject: [PATCH] Create indexBy --- snippets/indexBy.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 snippets/indexBy.md diff --git a/snippets/indexBy.md b/snippets/indexBy.md new file mode 100644 index 00000000000..507ea52a0c5 --- /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' } } +```