Returns the memoized (cached) function.
- Create an empty cache 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.
- The
function
keyword must be used in order to allow the memoized function to have itsthis
context changed if necessary. - Allow access to the
cache
by setting it as a property on the returned function.
const memoize = fn => { const cache = new Map(); const cached = function (val) { return cache.has(val) ? cache.get(val) : cache.set(val, fn.call(this, val)) && cache.get(val); }; cached.cache = cache; return cached; };
Examples
// See the `anagrams` snippet. const anagramsCached = memoize(anagrams); anagramsCached('javascript'); // takes a long time anagramsCached('javascript'); // returns virtually instantly since it's cached console.log(anagramsCached.cache); // The cached anagrams map
Recommended snippets
Where and how can I use memoization in JavaScript?
JavaScript, Article
Learn different ways to memoize function calls in JavaScript as well as when to use memoization to get the best performance results.
pipeAsyncFunctions
JavaScript, Function
Performs left-to-right function composition for asynchronous functions.
converge
JavaScript, Function
Accepts a converging function and a list of branching functions and returns a function that applies each branching function to the arguments and the results of the branching functions are passed as arguments to the converging function.