UNPKG

@bitbite/filtered-list

Version:

filter a list of items

23 lines (22 loc) 871 B
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 */ })