From 14babbe6ea4a47135d12f89a92bd828e87457cd0 Mon Sep 17 00:00:00 2001 From: Ezra Celli Date: Tue, 24 Mar 2020 20:24:04 -0400 Subject: [PATCH 1/2] [#1092] update implementation & explanation for mapObject --- snippets/mapObject.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/snippets/mapObject.md b/snippets/mapObject.md index 04130214f..3a1f593c2 100644 --- a/snippets/mapObject.md +++ b/snippets/mapObject.md @@ -5,13 +5,12 @@ tags: array,object,advanced Maps the values of an array to an object using a function, where the key-value pairs consist of the stringified value as the key and the mapped value. -Use an anonymous inner function scope to declare an undefined memory space, using closures to store a return value. Use a new `Array` to store the array with a map of the function over its data set and a comma operator to return a second step, without needing to move from one context to another (due to closures and order of operations). +Use `Array.prototype.map()` to convert each element in `arr` to an `Object` literal with one property. +Use `el` as the property's name (`el.toString()` will be called internally), and call the passed `fn` with `el` to derive the property's value. +Use the `spread` operator (`...`) to call `Object.assign()` with the elements of the mapped array. ```js -const mapObject = (arr, fn) => - (a => ( - (a = [arr, arr.map(fn)]), a[0].reduce((acc, val, ind) => ((acc[val] = a[1][ind]), acc), {}) - ))(); +const mapObject = (arr, fn) => Object.assign(...arr.map(el => ({ [el]: fn(el) }))); ``` ```js From 5b2269be8debb1ea08e5982884442b2b5ab8a2b6 Mon Sep 17 00:00:00 2001 From: Angelos Chalaris Date: Wed, 15 Apr 2020 18:31:58 +0300 Subject: [PATCH 2/2] Update mapObject.md --- snippets/mapObject.md | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/snippets/mapObject.md b/snippets/mapObject.md index 3a1f593c2..c841cbcf9 100644 --- a/snippets/mapObject.md +++ b/snippets/mapObject.md @@ -1,19 +1,21 @@ --- title: mapObject -tags: array,object,advanced +tags: array,object,intermediate --- -Maps the values of an array to an object using a function, where the key-value pairs consist of the stringified value as the key and the mapped value. +Maps the values of an array to an object using a function, where the key-value pairs consist of the original value as the key and the result of the function as the value. -Use `Array.prototype.map()` to convert each element in `arr` to an `Object` literal with one property. -Use `el` as the property's name (`el.toString()` will be called internally), and call the passed `fn` with `el` to derive the property's value. -Use the `spread` operator (`...`) to call `Object.assign()` with the elements of the mapped array. +Use `Array.prototype.reduce()` to apply `fn` to each element in `arr` and combine the results into an object. +Use `el` as the key for each property and the result of `fn` as the value. ```js -const mapObject = (arr, fn) => Object.assign(...arr.map(el => ({ [el]: fn(el) }))); +const mapObject = (arr, fn) => + arr.reduce((acc, el, i) => { + acc[el] = fn(el, i, arr); + return acc; + }, {}); ``` ```js -const squareIt = arr => mapObject(arr, a => a * a); -squareIt([1, 2, 3]); // { 1: 1, 2: 4, 3: 9 } -``` \ No newline at end of file +mapObject([1, 2, 3], a => a * a); // { 1: 1, 2: 4, 3: 9 } +```