实现一个 LRU 算法(Least Recently Used),可充分利用js 自带的数据结构。

javascript 复制代码
  class LRUCache {
    constructor(lenght) {
      this.length = lenght; // 存储长度
      this.data = new Map(); // 存储数据
    }
    // 存储数据,通过键值对的方式
    set(key, value) {
      const data = this.data;
      if (data.has(key)) {
        data.delete(key)
      }
      data.set(key, value);


      // 如果超出了容量,则需要删除最久的数据
      if (data.size > this.length) {
        const delKey = data.keys().next().value;
        data.delete(delKey);
      }
    }
    // 获取数据
    get(key) {
      const data = this.data;
      // 未找到
      if (!data.has(key)) {
        return null;
      }
      const value = data.get(key); // 获取元素
      data.delete(key); // 删除元素
      data.set(key, value); // 重新插入元素
    }
  }
    const lruCache = new LRUCache(5);
    lruCache.set('name', '小猪课堂');
    lruCache.set('age', 22);
    lruCache.set('sex', '男');
    lruCache.set('height', 176);
    lruCache.set('weight', '100');
    console.log(lruCache);

    lruCache.get('sex');
    console.log(lruCache);

资料来源:

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

相关推荐
东华帝君2 分钟前
react 虚拟滚动列表的实现 —— 动态高度
前端
CptW4 分钟前
手撕 Promise 一文搞定
前端·面试
温宇飞5 分钟前
Web 异步编程
前端
腹黑天蝎座5 分钟前
浅谈React19的破坏性更新
前端·react.js
东华帝君5 分钟前
react组件常见的性能优化
前端
第七种黄昏5 分钟前
【前端高频面试题】深入浏览器渲染原理:从输入 URL 到页面绘制的完整流程解析
前端·面试·职场和发展
angelQ5 分钟前
前端fetch手动解析SSE消息体,字符串双引号去除不掉的问题定位
前端·javascript
Huangyi6 分钟前
第一节:Flow的基础知识
android·前端·kotlin
林希_Rachel_傻希希7 分钟前
JavaScript 解构赋值详解,一文通其意。
前端·javascript
Yeats_Liao8 分钟前
Go Web 编程快速入门 02 - 认识 net/http 与 Handler 接口
前端·http·golang