ES2015 LRU Cache

4736 단어 JavaScript
맵 클래스는 삽입 순서로 요소를 열거하기 때문에, 방문할 때 delete/set은 항상 이전 순서대로 열거합니다.이걸 이용해서...
class LruMap extends Map {
    constructor(capacity) {
        super()
        if (Number.isNaN(capacity) || capacity <= 0) {
            throw new Error(`Invalid capacity: ${capacity}`)
        }
        Object.defineProperty(this, "capacity", {value: capacity})
    }

    get(key) {
        if (!this.has(key)) {
            return undefined
        }
        const value = super.get(key)

        this.delete(key)
        super.set(key, value)

        return value
    }

    set(key, value) {
        super.set(key, value)
        if (this.size > this.capacity) {
            this.deleteOldestEntry()
        }
        return this
    }

    deleteOldestEntry() {
        for (const entry of this) {
            this.delete(entry[0])
            return entry
        }
    }
}
미니파이면 400bytes 정도.
요점은 Devols가 간단명료하게 드러날 수 있다는 것이다.

좋은 웹페이지 즐겨찾기