[Javascript] Write memoize function
class MemoizeMap {
constructor() {
this._map = new Map();
this._weakMap = new WeakMap();
}
_isObject(v) {
return typeof v === "object" && v !== null;
}
set(key, value) {
if (this._isObject(key)) {
this._weakMap.set(key, value);
} else {
this._map.set(key, value);
}
}
get(key) {
if (this._isObject(key)) {
return this._weakMap.get(key);
} else {
return this._map.get(key);
}
}
has(key) {
if (this._isObject(key)) {
return this._weakMap.has(key);
} else {
return this._map.has(key);
}
}
}
function memoize(func, resolver) {
function memoized(...args) {
const key = resolver ? resolver(...args) : args[0];
const cache = memoized.cache;
if (cache.has(key)) {
return cache.get(key);
}
const result = func.apply(this, args);
cache.set(key, result);
return result;
}
memoized.cache = new MemoizeMap();
return memoized;
}
var object = { a: 1, b: 2 };
var other = { c: 3, d: 4 };
var values = memoize((obj) => Object.values(obj));
console.log(values(object)); // [ 1, 2 ]
console.log(values(other)); // [ 3, 4 ]
object.a = 2;
console.log(values(object)); // [ 1, 2 ]
values.cache.set(object, ["a", "b"]);
console.log(values(object)); // [ 'a', 'b' ]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2022-10-21 [Typescript] 62. Medium - Fibonacci Sequence
2022-10-21 [Typescript] 61. Medium. - Flip
2021-10-21 [AWS] RTO & RPO
2020-10-21 [Kotlin] Compare Functional Programming in Java and Kotlin
2020-10-21 [Kotlin] Catch Error in Java
2019-10-21 [VSCode] Custom settings
2019-10-21 [Flutter] Use http package to get data from network