From 983ed2ba297eb4222c9e2c75f0ee2ee69c4b8b9c Mon Sep 17 00:00:00 2001 From: atomiks Date: Tue, 2 Jan 2018 13:05:39 +1100 Subject: [PATCH] Update memoize to use a map and allow access to it --- snippets/memoize.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/snippets/memoize.md b/snippets/memoize.md index c1b6b1343..174812f26 100644 --- a/snippets/memoize.md +++ b/snippets/memoize.md @@ -2,13 +2,16 @@ Returns the memoized (cached) function. -Use `Object.create(null)` to create an empty object without `Object.prototype` (so that those properties are not resolved if the input value is something like `'hasOwnProperty'`). +Create an empty cache using by instantiating a new `Map` object. Return a function which takes a single argument to be supplied to the memoized function by first checking if the function's output for that specific input value is already cached, or store and return it if not. +Allow access to the `cache` by setting it as a property on the returned function. ```js const memoize = fn => { - const cache = Object.create(null); - return value => cache[value] || (cache[value] = fn(value)); + const cache = new Map(); + const cached = val => cache.get(val) || (cache.set(val, fn(val))) && cache.get(val); + cached.cache = cache; + return cached; }; ``` @@ -17,4 +20,5 @@ const memoize = fn => { const anagramsCached = memoize(anagrams); anagramsCached('javascript'); // takes a long time anagramsCached('javascript'); // returns virtually instantly since it's now cached +console.log(anagramsCached.cache); // Map ```