实现一个 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缓存?

相关推荐
小小竹子7 分钟前
前端vue-实现富文本组件
前端·vue.js·富文本
万物得其道者成15 分钟前
React Zustand状态管理库的使用
开发语言·javascript·ecmascript
小白小白从不日白16 分钟前
react hooks--useReducer
前端·javascript·react.js
下雪天的夏风28 分钟前
TS - tsconfig.json 和 tsconfig.node.json 的关系,如何在TS 中使用 JS 不报错
前端·javascript·typescript
青稞儿34 分钟前
面试题高频之token无感刷新(vue3+node.js)
vue.js·node.js
diygwcom40 分钟前
electron-updater实现electron全量版本更新
前端·javascript·electron
volodyan43 分钟前
electron react离线使用monaco-editor
javascript·react.js·electron
^^为欢几何^^1 小时前
lodash中_.difference如何过滤数组
javascript·数据结构·算法
Hello-Mr.Wang1 小时前
vue3中开发引导页的方法
开发语言·前端·javascript
程序员凡尘1 小时前
完美解决 Array 方法 (map/filter/reduce) 不按预期工作 的正确解决方法,亲测有效!!!
前端·javascript·vue.js