@bitbite/filtered-list
Version:
filter a list of items
23 lines (22 loc) • 871 B
text/typescript
function hashFn(...params: any[]): string {
return params.map( param => {
if (typeof param === 'string') return param;
if (typeof param === 'number') return String(param);
if (typeof param === 'function') return param.constructor.name;
if (Array.isArray(param)) return param.toString()
if (typeof param === 'object') return JSON.stringify(param)
}).join('_')
}
export const Memoized = (function (store: { [key:string]: any }) {
return function (fn: Function, onMemoized?: Function): Function {
return (...params: any[]) => {
const key = hashFn(params)
if (key in store) {
onMemoized && onMemoized(store[key])
return store[key]
};
store[key] = fn(...params)
return store[key];
}
}
})({ /** empty store */ })