cytoscape
Version:
Graph theory (a.k.a. network) library for analysis and visualisation
38 lines (29 loc) • 713 B
JavaScript
export const memoize = ( fn, keyFn ) => {
if( !keyFn ){
keyFn = function(){
if( arguments.length === 1 ){
return arguments[0];
} else if( arguments.length === 0 ){
return 'undefined';
}
let args = [];
for( let i = 0; i < arguments.length; i++ ){
args.push( arguments[ i ] );
}
return args.join( '$' );
};
}
let memoizedFn = function(){
let self = this;
let args = arguments;
let ret;
let k = keyFn.apply( self, args );
let cache = memoizedFn.cache;
if( !(ret = cache[ k ]) ){
ret = cache[ k ] = fn.apply( self, args );
}
return ret;
};
memoizedFn.cache = {};
return memoizedFn;
};