diffusion
Version:
Diffusion JavaScript client
45 lines (37 loc) • 989 B
JavaScript
/*eslint valid-jsdoc: "off"*/
var a2a = require('./array').argumentsToArray;
function defaultCacheKey(args) {
return args;
}
/**
* Wrap a function with an automatic memoization layer.
*
* @param {Function} function
* - The function to cache results for.
* @param {Object} [cache={}]
* - The internal cache to use.
* @param {Function} [matcher]
* - The matcher function to return a cache key from an array of arguments
*
* @returns {Function} The memoized function
*/
function memoize(f, cache, matcher) {
matcher = matcher || defaultCacheKey;
cache = cache || {};
var c = function() {
var args = a2a(arguments);
var a = matcher(args);
var r = cache[a];
if (r) {
return r;
} else {
r = f.apply(f, args);
}
cache[a] = r;
return r;
};
// eslint-disable-next-line no-underscore-dangle
c._uncached = f;
return c;
}
module.exports = memoize;