40 lines
		
	
	
	
		
			788 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
	
		
			788 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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
 |