From 7bb5865b70108024e0c4bef7197d2cfbab0f4061 Mon Sep 17 00:00:00 2001 From: atomiks Date: Sun, 31 Dec 2017 22:55:55 +1100 Subject: [PATCH] Add memoize snippet --- snippets/memoize.md | 23 +++++++++++++++++++++++ tag_database | 1 + 2 files changed, 24 insertions(+) create mode 100644 snippets/memoize.md diff --git a/snippets/memoize.md b/snippets/memoize.md new file mode 100644 index 000000000..8a71702e1 --- /dev/null +++ b/snippets/memoize.md @@ -0,0 +1,23 @@ +### memoize + +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'). +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. + +```js +const memoize = fn => { + const cache = Object.create(null); + return value => cache[value] || (cache[value] = fn(value)); +}; +``` + +```js +// See the `anagrams` snippet. +const anagramsCached = memoize(anagrams); +anagramsCached('javascript'); // takes a long time +anagramsCached('javascript'); // returns virtually instantly since it's now cached +``` diff --git a/tag_database b/tag_database index d897e319c..f82dd92c5 100644 --- a/tag_database +++ b/tag_database @@ -81,6 +81,7 @@ lowercaseKeys:object mapObject:array max:math median:math +memoize:function min:math negate:logic nthElement:array