queue-typed
v2.6.0
Published
Queue data structure
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, ...
}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;Convert queue to array
const q = new Queue<number>([10, 20, 30]);
console.log(q.toArray()); // [10, 20, 30];API docs & Examples
Examples Repository
