queue-typed
v2.3.0
Published
Queue data structure
Downloads
1,607
Maintainers
Keywords
Readme
What
Brief
In the usual gig, we make do with Array.push and Array.shift to play Queue in JavaScript, but here's the kicker – native JavaScript Array isn't exactly Queue VIP. That shift move? It's a bit of a slow dance with a time complexity of linear time complexity O(n). When you're working with big data, you don't want to be caught slow-shifting. So, we roll up our sleeves and craft a Queue that's got a speedy constant time complexity O(1) Queue.enqueue(), a snappy O(1) Queue.dequeue(), and a lightning-fast O(1) Queue.getAt(). Yep, it's Queue-tastic!
more data structures
This is a standalone Queue data structure from the data-structure-typed collection. If you wish to access more data structures or advanced features, you can transition to directly installing the complete data-structure-typed package
How
install
npm
npm i queue-typed --saveyarn
yarn add queue-typedsnippet
TS
import {Queue} from 'queue-typed';
// /* or if you prefer */ import {Queue} from 'queue-typed';
const queue = new Queue<number>();
for (let i = 0; i < magnitude; i++) {
queue.enqueue(i);
}
for (let i = 0; i < magnitude; i++) {
queue.dequeue();
}
for (let i = 0; i < magnitude; i++) {
console.log(queue.getAt(i)); // 0, 1, 2, 3, ...
}JS
const {Queue} = require('queue-typed');
// /* or if you prefer */ const {Queue} = require('queue-typed');
const queue = new Queue();
for (let i = 0; i < magnitude; i++) {
queue.enqueue(i);
}
for (let i = 0; i < magnitude; i++) {
queue.dequeue();
}
for (let i = 0; i < magnitude; i++) {
console.log(queue.getAt(i)); // 0, 1, 2, 3, ...
}basic Queue creation and push operation
// Create a simple Queue with initial values
const queue = new Queue([1, 2, 3, 4, 5]);
// Verify the queue maintains insertion order
console.log([...queue]); // [1, 2, 3, 4, 5];
// Check length
console.log(queue.length); // 5;Queue shift and peek operations
const queue = new Queue<number>([10, 20, 30, 40]);
// Peek at the front element without removing it
console.log(queue.first); // 10;
// Remove and get the first element (FIFO)
const first = queue.shift();
console.log(first); // 10;
// Verify remaining elements and length decreased
console.log([...queue]); // [20, 30, 40];
console.log(queue.length); // 3;Queue for...of iteration and isEmpty check
const queue = new Queue<string>(['A', 'B', 'C', 'D']);
const elements: string[] = [];
for (const item of queue) {
elements.push(item);
}
// Verify all elements are iterated in order
console.log(elements); // ['A', 'B', 'C', 'D'];
// Process all elements
while (queue.length > 0) {
queue.shift();
}
console.log(queue.length); // 0;Queue as message broker for event processing
interface Message {
id: string;
type: 'email' | 'sms' | 'push';
recipient: string;
content: string;
timestamp: Date;
}
// Create a message queue for real-time event processing
const messageQueue = new Queue<Message>([
{
id: 'msg-001',
type: 'email',
recipient: '[email protected]',
content: 'Welcome!',
timestamp: new Date()
},
{
id: 'msg-002',
type: 'sms',
recipient: '+1234567890',
content: 'OTP: 123456',
timestamp: new Date()
},
{
id: 'msg-003',
type: 'push',
recipient: 'device-token-xyz',
content: 'New notification',
timestamp: new Date()
},
{
id: 'msg-004',
type: 'email',
recipient: '[email protected]',
content: 'Daily report',
timestamp: new Date()
}
]);
// Process messages in FIFO order (first message first)
const processedMessages: string[] = [];
while (messageQueue.length > 0) {
const message = messageQueue.shift();
if (message) {
processedMessages.push(`${message.type}:${message.recipient}`);
}
}
// Verify messages were processed in order
console.log(processedMessages); // [
// 'email:[email protected]',
// 'sms:+1234567890',
// 'push:device-token-xyz',
// 'email:[email protected]'
// ];
// Queue should be empty after processing all messages
console.log(messageQueue.length); // 0;API docs & Examples
Examples Repository
