// Priority Queue Item class PQi { constructor(item, priority) { this.item = item; this.priority = priority; } } // Priority Queue class PQ { constructor() { this.items = []; } enqueue(item, priority) { const pqi = new PQi(item, priority); let added = false; for(let i = 0; i < this.items.length; ++i) { if(priority < this.items[i].priority) { this.items.splice(i, 0, pqi); added = true; break; } } if(!added) { // then priority is highest, just add at end of array this.items.push(pqi); } } dequeue() { return this.items.shift(); } changePriority(item, newPriority) { for(let i = 0; i < this.items.length; ++i) { if(item === this.items[i].item) { this.items.splice(i, 1); break; } } this.enqueue(item, newPriority); } isEmpty() { return this.items.length === 0; } peekFirst() { return this.items[0]; } peekLast() { return this.items[this.items.length-1]; } }