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/priorityqueue
import { 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.
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() // true
Returns 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.entries() // [10, 20]