Skip to content

Javascript object with basic LRU functionalities

License

Notifications You must be signed in to change notification settings

aohua/lru-object

Repository files navigation

lru-object

Javascript object with basic LRU functionalities, the idea of this small library is to use the Proxy API to create a Javascript Object with LRU behaviors without loosing the Syntactic Sugar of Object(e.g. spread and rest operations).

How to install

Install with npm.

npm i --save lru-object

Install with yarn

yarn add lru-object

Features

  1. LRU cache features will be applied invisibly:
import createLRUCache from 'lru-object';

const lru = createLRUCache<number, number>(3);

lru[1] = 1;
lru[2] = 2;
lru[3] = 3;
// reached capacity
lru[4] = 4;
console.log({...lru});
// lru[1] is removed, current object { '2': 2, '3': 3, '4': 4 };

Please aware that the newly created Object {...lru} is nolonger a LRU cache but a plain javascript object.

  1. Keys will follow the least recently used sequence
import createLRUCache from 'lru-object';

const lru = createLRUCache<number, number>(3);

lru[1] = 1;
lru[2] = 2;
lru[3] = 3;
// reached capacity
lru[4] = 4;
console.log(Object.keys(lru));
// keys will follow the priority: ['4', '3', '2'];
  1. Use it as normal object
import createLRUCache from 'lru-object';

const lru = createLRUCache<number, number>(3);

lru['one'] = 1;
lru['two'] = 2;
lru['three'] = 3;
// reached capacity
delete lru['three']

for(const [k, v] of Object.entries(lru)) {
    console.log(k, v);
}

for (const key in lru) {
    if (lru.hasOwnProperty(key)) {
    console.log(key);
    }
}

Things that are not working as expected

  1. Spread operator is not following the least recently used sequence
import createLRUCache from 'lru-object';

const lru = createLRUCache<number, number>(3);

lru[1] = 1;
lru[2] = 2;
lru[3] = 3;
console.log({...lru});
// result: { '1': 1, '2': 2, '3': 3 };
// expected: { '3': 3, '2': 2, '1': 1 };

TODO

  1. Some options for the LRU cache
  2. Fix typescript issues
  3. ...

About

Javascript object with basic LRU functionalities

Resources

License

Stars

Watchers

Forks

Packages

No packages published