这是一个琐碎的问题,但是我很难将ternary
运算符转换为if
。这是我尝试过的。
function memoize(fn) {
const cache = {};
return (...args) => {
const stringifiedArgs = stringifyArgs(args);
const result = (cache[stringifiedArgs] = !cache.hasOwnProperty(
stringifiedArgs
)
? fn(...args)
: cache[stringifiedArgs]);
return result;
};
}
// function memoize(fn) {
// const cache = {};
// return (...args) => {
// const stringifiedArgs = stringifyArgs(args);
// return result = (if (cache[stringifiedArgs] = !cache.hasOwnProperty(stringifiedArgs)) {
// fn(...args);
// } else {
// cache[stringifiedArgs];
// })
// };
// }
答案 0 :(得分:4)
这是我能得到的最干净的-检查属性并将备注函数的结果保存在缓存中(如果不存在)。然后从缓存中返回它。
function memoize(fn) {
const cache = {};
return (...args) => {
const stringifiedArgs = stringifyArgs(args);
if (!cache.hasOwnProperty(stringifiedArgs)) {
cache[stringifiedArgs] = fn(...args);
}
return cache[stringifiedArgs];
};
}
您还可以在此处非常安全地使用in
运算符:
function memoize(fn) {
const cache = {};
return (...args) => {
const stringifiedArgs = args.join(`,`); // just for testing
if (!(stringifiedArgs in cache)) {
cache[stringifiedArgs] = fn(...args);
}
return cache[stringifiedArgs];
};
}
const fib = memoize(n => n < 2 ? n : fib(n - 1) + fib(n - 2));
console.log(fib(78));
答案 1 :(得分:1)
如果您想要保持相同的结构,则可能需要一个实例。但是,这不是最干净的方法...
PROPAGATE_EXCEPTIONS