A very simple and lightweight Javascript Priority Queue, based on this article.
Focused on functionality rather than performance.
Works with both ES Modules and CommonJS.
npm i @nermin99/priorityqueueimport { PriorityQueue } from '@nermin99/priorityqueue'or
const { PriorityQueue } = require('@nermin99/priorityqueue')const pq = new PriorityQueue()
pq.enqueue(1, 30)
pq.enqueue(2, 10)
pq.enqueue('x,y', 20)
pq.dequeue() // { key: 2, priority: 10 }
pq.front() // { key: 'x,y', priority: 20 }
pq.rear() // { key: 1, priority: 30 }- .enqueue(key, priority)
- .dequeue()
- .updatePriority(key, newPriority)
- .front()
- .rear()
- .isEmpty()
- .entries()
- .keys()
- .priorities()
Adds an element with a given key and priority to the queue.
Keys can be of any type and are compared by identity (like Map keys), so two distinct objects with the same shape count as different keys.
pq.enqueue(1, 20)
pq.enqueue('x,y', 10)
pq // [{key: 'x,y', priority: 10}, {key: 1, priority: 20}]Removes the highest priority element from the queue and returns it.
pq.enqueue(1, 20)
pq.enqueue('x,y', 10)
const element = pq.dequeue()
element // {key: 'x,y', priority: 10}Updates the priority of an existing element in the queue.
pq.enqueue(1, 20)
pq.enqueue('x,y', 10)
pq.updatePriority(1, 5)
pq // [{key: 1, priority: 5}, {key: 'x,y', priority: 10}]Returns the highest priority element in the queue without removing it.
pq.enqueue(1, 20)
pq.enqueue('x,y', 10)
pq.front() // {key: 'x,y', priority: 10}
pq // [{key: 'x,y', priority: 10}, {key: 1, priority: 20}]Returns the lowest priority element in the queue without removing it.
pq.enqueue(1, 20)
pq.enqueue('x,y', 10)
pq.rear() // {key: 1, priority: 20}
pq // [{key: 'x,y', priority: 10}, {key: 1, priority: 20}]Returns true if the queue is empty.
pq.enqueue(1, 20)
pq.dequeue()
pq.isEmpty() // trueReturns an array of the queue key/priority-pairs ordered by priority.
pq.enqueue(1, 20)
pq.enqueue('x,y', 10)
pq.entries() // [{key: 'x,y', priority: 10}, {key: 1, priority: 20}]Returns an array of the queue keys ordered by priority.
pq.enqueue(1, 20)
pq.enqueue('x,y', 10)
pq.keys() // ['x,y', 1]Returns an array of the queue priorities ordered by priority.
pq.enqueue(1, 20)
pq.enqueue('x,y', 10)
pq.priorities() // [10, 20]