js:使用Map实现一个LRU缓存

简介: js:使用Map实现一个LRU缓存

LRU:Least Recently Used,最近最少使用

js的Map会保持插入顺序,可以基于Map实现LRU

代码实现

class LRUCache {
  constructor(length) {
    // 容器最大长度
    this.length = length;
    // 数据容器
    this.map = new Map();
  }
  // 设置
  set(key, value) {
    // 容量限制
    if (this.map.size >= this.length) {
      // 等价于:let firstKey = this.map.keys()[0]
      let firstKey = this.map.keys().next().value;
      this.map.delete(firstKey);
    }
    // 存在就删除
    if (this.map.has(key)) {
      this.map.delete(key);
    }
    // 重新加入
    this.map.set(key, value);
  }
  // 获取
  get(key) {
    // 不存在
    if (!this.map.has(key)) {
      return null;
    }
    // 访问过就重新加入
    let value = this.map.get(key);
    this.map.delete(key);
    this.map.set(key, value);
  }
}

测试

let lru = new LRUCache(3);
lru.set("name", "Tom");
lru.set("age", 20);
lru.set("school", "puk");
console.log(lru);
// Map(3) { 'name' => 'Tom', 'age' => 20, 'school' => 'puk' }
lru.set("name", "Tom");
console.log(lru);
// Map(3) { 'age' => 20, 'school' => 'puk', 'name' => 'Tom' }
lru.set("contry", "china");
console.log(lru);
// Map(3) { 'school' => 'puk', 'name' => 'Tom', 'contry' => 'china' }


参考

面试官:请使用JS完成一个LRU缓存?

相关文章
|
4月前
|
JavaScript 前端开发 API
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
array.map()可以用来数据转换、创建派生数组、应用函数、链式调用、异步数据流处理、复杂API请求梳理、提供DOM操作、用来搜索和过滤等,比for好用太多了,主要是写法简单,并且非常直观,并且能提升代码的可读性,也就提升了Long Term代码的可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
9月前
|
缓存 JavaScript 前端开发
Java 如何确保 JS 不被缓存
【10月更文挑战第19天】在 Java 中,可以通过设置 HTTP 响应头来确保 JavaScript 文件不被浏览器缓存。方法包括:1. 使用 Servlet 设置响应头,通过 `doGet` 方法设置 `Expires`、`Cache-Control` 和 `Pragma` 头;2. 在 Spring Boot 中配置拦截器,通过 `NoCacheInterceptor` 类和 `WebConfig` 配置类实现相同功能。这两种方法都能确保每次请求都能获取到最新的 JavaScript 内容。
|
9月前
|
缓存 JavaScript 前端开发
Java 如何确保 JS 不被缓存
大家好,我是 V 哥。本文探讨了 Java 后端确保 JavaScript 不被缓存的问题,分析了文件更新后无法生效、前后端不一致、影响调试与开发及安全问题等场景,并提供了使用版本号、设置 HTTP 响应头、配置静态资源缓存策略和使用 ETag 等解决方案。最后讨论了缓存的合理使用及其平衡方法。
173 0
|
9月前
|
存储 JavaScript 前端开发
js中map属性
js中map属性
103 0
|
9月前
|
前端开发 JavaScript 索引
JavaScript 数组常用高阶函数总结,包括插入,删除,更新,反转,排序等,如map、splice等
JavaScript数组的常用高阶函数,包括遍历、插入、删除、更新、反转和排序等操作,如map、splice、push、pop、reverse等。
175 0
|
9月前
|
缓存 JavaScript CDN
一次js请求一般情况下有哪些地方会有缓存处理?
一次js请求一般情况下有哪些地方会有缓存处理?
92 4
|
10月前
|
JavaScript 前端开发
JavaScript 中 五种迭代数组的方法 every some map filter forEach
本文介绍了JavaScript中五种常用数组迭代方法:every、some、filter、map和forEach,并通过示例代码展示了它们的基本用法和区别。
|
10月前
|
JavaScript 前端开发
js map和reduce
js map和reduce
|
10月前
|
存储 JavaScript 前端开发
js的map和set |21
js的map和set |21
|
10月前
|
JavaScript 前端开发
JavaScript Array map() 方法
JavaScript Array map() 方法