lodash 中如何删除整个 memoize 缓存?
How is the entire memoize cache deleted in lodash?
当使用 lodash
中的 _.memoize
时,是否可以删除整个缓存?
我在 github 上看到了一些讨论:
https://github.com/lodash/lodash/issues/1269
https://github.com/lodash/lodash/issues/265
但我仍然不是 100% 清楚如何处理,如果您想清除页面范围的缓存?是否打算先将其设置为 WeakMap,然后根据需要调用 clear?
Lodash 不提供删除所有记忆函数缓存的方法。你必须一项一项地做。这是因为每个记忆函数都有自己的缓存对象实例。
看看lodash memoize
source code:
function memoize(func, resolver) {
var memoized = function() {
// ...
}
memoized.cache = new (memoize.Cache || MapCache);
return memoized;
}
您提到的 GitHub 讨论是关于清除单个记忆函数的缓存。
您可以将所有记忆函数保存到一个数组中,以便它能够遍历它们并一个一个地清除缓存。
const func1 = _.memoize(origFunc1);
const func2 = _.memoize(origFunc2);
const memoizedFunctions = [];
memoizedFunctions.push(func1);
memoizedFunctions.push(func2);
// clear cache of all memoized functions
memoizedFunctions.forEach(f => f.cache = new _.memoize.Cache);
2019年更新答案:),lodash在缓存方法中增加了clear函数所以清除缓存的方式可以是
memoizedFunctions.forEach(f => f.cache.clear());
已测试 lodash 版本 4.17.13
function _printName(name) {
console.log(name);
}
const printName = _.memoize(_printName);
printName("David");
printName("John");
清除整个记忆缓存(大卫和约翰):
printName.cache.clear();
要显式删除单个记忆对象:
printName.cache.delete("David");
当使用 lodash
中的 _.memoize
时,是否可以删除整个缓存?
我在 github 上看到了一些讨论: https://github.com/lodash/lodash/issues/1269 https://github.com/lodash/lodash/issues/265
但我仍然不是 100% 清楚如何处理,如果您想清除页面范围的缓存?是否打算先将其设置为 WeakMap,然后根据需要调用 clear?
Lodash 不提供删除所有记忆函数缓存的方法。你必须一项一项地做。这是因为每个记忆函数都有自己的缓存对象实例。
看看lodash memoize
source code:
function memoize(func, resolver) {
var memoized = function() {
// ...
}
memoized.cache = new (memoize.Cache || MapCache);
return memoized;
}
您提到的 GitHub 讨论是关于清除单个记忆函数的缓存。
您可以将所有记忆函数保存到一个数组中,以便它能够遍历它们并一个一个地清除缓存。
const func1 = _.memoize(origFunc1);
const func2 = _.memoize(origFunc2);
const memoizedFunctions = [];
memoizedFunctions.push(func1);
memoizedFunctions.push(func2);
// clear cache of all memoized functions
memoizedFunctions.forEach(f => f.cache = new _.memoize.Cache);
2019年更新答案:),lodash在缓存方法中增加了clear函数所以清除缓存的方式可以是
memoizedFunctions.forEach(f => f.cache.clear());
已测试 lodash 版本 4.17.13
function _printName(name) {
console.log(name);
}
const printName = _.memoize(_printName);
printName("David");
printName("John");
清除整个记忆缓存(大卫和约翰):
printName.cache.clear();
要显式删除单个记忆对象:
printName.cache.delete("David");