1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| class LRUCache {
| constructor () {
| this.max = 1000
| this.map = new Map()
| }
|
| get (key) {
| const value = this.map.get(key)
| if (value === undefined) {
| return undefined
| } else {
| // Remove the key from the map and add it to the end
| this.map.delete(key)
| this.map.set(key, value)
| return value
| }
| }
|
| delete (key) {
| return this.map.delete(key)
| }
|
| set (key, value) {
| const deleted = this.delete(key)
|
| if (!deleted && value !== undefined) {
| // If cache is full, delete the least recently used item
| if (this.map.size >= this.max) {
| const firstKey = this.map.keys().next().value
| this.delete(firstKey)
| }
|
| this.map.set(key, value)
| }
|
| return this
| }
| }
|
| module.exports = LRUCache
|
|