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");