only queue unique items and retrieve them only once
$ npm install --save uniqueue'use strict';
const Uniqueue = require('uniqueue');
const { push, pop, remaining, queued, processed, clear } = new Uniqueue();
const urls = [
'https://google.com',
'https://google.com',
'https://google.com/',
'https://www.google.com'
];
// Only add unique items to the queue
urls.forEach(url => {
push(url);
});
console.log('=>', queued.size, processed.size, remaining());
// => 3 0 3
// Extract items from queue
while (remaining() > 0) {
console.log('=> remaining:', remaining());
console.log('=>', pop());
console.log('=> processed:', processed.size);
console.log();
}
// => remaining: 3
// => https://google.com
// => processed: 1
//
// => remaining: 2
// => https://google.com/
// => processed: 2
//
// => remaining: 1
// => https://www.google.com
// => processed: 3
// Clear the queue
clear();
console.log('=>', queued.size, processed.size, remaining());
// => 0 0 0
// Use a custom matcher function to prevent similar duplicates
const matcher = (a, b) => {
return (
a.replace(/[^a-z]/gi, '') === b.replace(/[^a-z]/gi, '') ||
a.replace(/:\/\/www\./i, '://') === b.replace(/:\/\/www\./i, '://')
);
};
urls.forEach(url => {
push(url, matcher);
});
console.log('=>', [...queued]);
// => [ 'https://google.com' ]
// * Use a custom matcher function during initialization
const queue = new Uniqueue(matcher);
// ...Returns a new queue instance.
-
-
Optional:Functionis evaluated on every attempt to add an item to the queue.-
Overrides the default
Setvalue equality check -
e.g.
(a, b) => a.name.toUpperCase() === b.name.toUpperCase()will prevent{ name: "Bob" }from being added if{ name: "BOB" }is already in the queue.
-
-
Uniqueue instance.
-
Adds an item of
Anytype to the queue.-
Optional:Functionoverrides thematcherfunction provided during initialization (if it was provided).
-
-
Returns the next available item from the queue or
nullif no items are available. -
Returns the
Numberof available items from the queue. -
The
Setholding all unique items added to the queue. -
The
Setholding all items that have beenpop()'d from the queue. -
Clears the queue, including
.queuedand.processed.
ISC © Buster Collings