【发布时间】:2017-04-11 21:06:27
【问题描述】:
前言:尝试通过转换一个利用哈希表的简单记忆来学习ES6 Maps。
问题:
可以将起始对象替换为new Map(),如果可以,如何?并且有什么优势吗?如果不是,为什么?
说明:
这是一个带有函数 (add) 和起始对象 ({}) 的备忘录。在调用 memoized add (mAdd) 时,参数为 spread。最后,测试/设置哈希索引并返回值。
LINK TO CODE
const memo = (fn, hash) => (...a) => {
return hash[a] === void 0 ? hash[a] = fn(...a) : `${hash[a]} memo`;
};
const add = (x, y) => x + y;
const mAdd = memo(add, {});
console.log(mAdd(2,2));
console.log(mAdd(2,2));
不适用于地图:
const memo = (fn, map) => (...a) => {
return map.get(a) === void 0 ? map.set(a, fn(...a)) : `${map.get(a)} memo`;
};
const add = (x, y) => x + y;
const mAdd = memo(add, new Map());
console.log(mAdd(2,2));
console.log(mAdd(2,2));
【问题讨论】:
-
if so, how?- 用new Map()替换{} -
@JaromandaX 这不是那么容易吗? repl.it/E9DG/1我试过了
-
我也是如此 - 它对我有用,奇怪的是
-
您可能还想查看为此目的的 WeakMaps
-
您能创建一个答案吗?我仍然不确定标记为正确的问题是否确实是最佳答案。
标签: javascript dictionary ecmascript-6 hashtable memoization