lodash _.memoize
Posted qiqi715
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lodash _.memoize相关的知识,希望对你有一定的参考价值。
_.memoize(func, [resolver])
创建一个会缓存 func 结果的函数。 如果提供了 resolver ,就用 resolver 的返回值作为 key 缓存函数的结果。 默认情况下用第一个参数作为缓存的 key。 func 在调用时 this 会绑定在缓存函数上。
注意: 缓存会暴露在缓存函数的 cache 上。 它是可以定制的,只要替换了 _.memoize.Cache 构造函数,或实现了 Map 的 delete, get, has, 和 set方法。
参数
func (Function): 需要缓存化的函数.
[resolver] (Function): 这个函数的返回值作为缓存的 key。
返回
(Function): 返回缓存化后的函数。
举例1: 获取J(1000000)的值
const J = (n) => n === 0 ? 1 : J(n-1) + 1
如果直接调用J(1000000),会导致堆栈溢出,改用lodash中_.memoize, 记忆上一次函数结果
代码:
const JJ = _.memoize((n) => n === 0 ? 1 : JJ(n - 1) + 1);
for (let i = 1; i <= 1000000; i++) {
JJ(i);
}
console.log(JJ(1000000));
举例2: 斐波那契数列F(1000)的值
const F = (n) => n < 2 ? 1 : F(n-1) + F(n-2)
同上例, 直接调用,会导致堆栈溢出,需要用_.memoize。
代码:
const FF = _.memoize((n) => n < 2 ? 1 : FF(n - 1) + FF(n - 2));
for (let i = 1; i <= 1000; i++) {
FF(i);
}
console.log(FF(1000));
以上是关于lodash _.memoize的主要内容,如果未能解决你的问题,请参考以下文章
Lodash memoize – 如何删除具有复杂键的缓存条目?
ModuleNotFoundError:没有名为'memoize'的模块