<ahref="https://twitter.com/invertaseio"><imgsrc="https://img.shields.io/twitter/follow/invertaseio.svg?style=social&label=Follow"alt="Follow on Twitter"></a>
</p>
Extremely fast and lightweight [double-ended queue](http://en.wikipedia.org/wiki/Double-ended_queue) implementation with zero dependencies.
Denque is a well tested, extremely fast and lightweight [double-ended queue](http://en.wikipedia.org/wiki/Double-ended_queue)
implementation with zero dependencies and includes TypeScript types.
This implementation is currently the fastest available, even faster than `double-ended-queue`, see the [benchmarks](#benchmarks)
This implementation is currently the fastest available, even faster than `double-ended-queue`, see the [benchmarks](https://docs.page/invertase/denque/benchmarks).
Every queue operation is done at a constant `O(1)` - including random access from `.peekAt(index)`.
-[`splice(int index, int count, item1, item2, ...)`](#splice)
-[`isEmpty()`](#isempty---boolean)
-[`clear()`](#clear---void)
#### `new Denque()` -> `Denque`
Creates an empty double-ended queue with initial capacity of 4.
Create and consume a queue:
```js
vardenque=newDenque();
denque.push(1);
denque.push(2);
denque.push(3);
denque.shift();//1
denque.pop();//3
```
<hr>
#### `new Denque(Array items)` -> `Denque`
Creates a double-ended queue from `items`.
constDenque=require("denque");
```js
vardenque=newDenque([1,2,3,4]);
constdenque=newDenque([1,2,3,4]);
denque.shift();// 1
denque.pop();// 4
```
<hr>
#### `push(item)` -> `int`
Push an item to the back of this queue. Returns the amount of items currently in the queue after the operation.
```js
vardenque=newDenque();
denque.push(1);
denque.pop();// 1
denque.push(2);
denque.push(3);
denque.shift();// 2
denque.shift();// 3
```
<hr>
#### `unshift(item)` -> `int`
Unshift an item to the front of this queue. Returns the amount of items currently in the queue after the operation.
```js
vardenque=newDenque([2,3]);
denque.unshift(1);
denque.toString();// "1,2,3"
denque.unshift(-2);
denque.toString();// "-2,-1,0,1,2,3"
```
<hr>
#### `pop()` -> `dynamic`
Pop off the item at the back of this queue.
Note: The item will be removed from the queue. If you simply want to see what's at the back of the queue use [`peekBack()`](#peekback---dynamic) or [`.peekAt(-1)`](#peekAtint-index---dynamic).
See the [API reference documentation](https://docs.page/invertase/denque/api)for more examples.
If the queue is empty, `undefined` is returned. If you need to differentiate between `undefined` values in the queue and `pop()` return value -
check the queue `.length` before popping.
```js
vardenque=newDenque([1,2,3]);
denque.pop();// 3
denque.pop();// 2
denque.pop();// 1
denque.pop();// undefined
```
**Aliases:**`removeBack`
<hr>
#### `shift()` -> `dynamic`
Shifts off the item at the front of this queue.
Note: The item will be removed from the queue. If you simply want to see what's at the front of the queue use [`peekFront()`](#peekfront---dynamic) or [`.peekAt(0)`](#peekAtint-index---dynamic).
If the queue is empty, `undefined` is returned. If you need to differentiate between `undefined` values in the queue and `shift()` return value -
check the queue `.length` before shifting.
```js
vardenque=newDenque([1,2,3]);
denque.shift();// 1
denque.shift();// 2
denque.shift();// 3
denque.shift();// undefined
```
<hr>
#### `toArray()` -> `Array`
Returns the items in the queue as an array. Starting from the item in the front of the queue and ending to the item at the back of the queue.
```js
vardenque=newDenque([1,2,3]);
denque.push(4);
denque.unshift(0);
denque.toArray();// [0,1,2,3,4]
```
<hr>
#### `peekBack()` -> `dynamic`
Returns the item that is at the back of this queue without removing it.
If the queue is empty, `undefined` is returned.
```js
vardenque=newDenque([1,2,3]);
denque.push(4);
denque.peekBack();// 4
```
<hr>
#### `peekFront()` -> `dynamic`
Returns the item that is at the front of this queue without removing it.
If the queue is empty, `undefined` is returned.
```js
vardenque=newDenque([1,2,3]);
denque.push(4);
denque.peekFront();// 1
```
<hr>
#### `peekAt(int index)` -> `dynamic`
Returns the item that is at the given `index` of this queue without removing it.
The index is zero-based, so `.peekAt(0)` will return the item that is at the front, `.peekAt(1)` will return
the item that comes after and so on.
The index can be negative to read items at the back of the queue. `.peekAt(-1)` returns the item that is at the back of the queue,
`.peekAt(-2)` will return the item that comes before and so on.
Returns `undefined` if `index` is not a valid index into the queue.
```js
vardenque=newDenque([1,2,3]);
denque.peekAt(0);//1
denque.peekAt(1);//2
denque.peekAt(2);//3
denque.peekAt(-1);// 3
denque.peekAt(-2);// 2
denque.peekAt(-3);// 1
```
**Note**: The implementation has O(1) random access using `.peekAt()`.
**Aliases:**`get`
<hr>
#### `remove(int index, int count)` -> `array`
Remove number of items from the specified index from the list.
Returns array of removed items.
Returns undefined if the list is empty.
```js
vardenque=newDenque([1,2,3,4,5,6,7]);
denque.remove(0,3);//[1,2,3]
denque.remove(1,2);//[5,6]
vardenque1=newDenque([1,2,3,4,5,6,7]);
denque1.remove(4,100);//[5,6,7]
```
<hr>
#### `removeOne(int index)` -> `dynamic`
Remove and return the item at the specified index from the list.
Returns undefined if the list is empty.
```js
vardenque=newDenque([1,2,3,4,5,6,7]);
denque.removeOne(4);// 5
denque.removeOne(3);// 4
denque1.removeOne(1);// 2
```
<hr>
#### `splice(int index, int count, item1, item2, ...)` -> `array`
Native splice implementation.
Remove number of items from the specified index from the list and/or add new elements.
Returns array of removed items or empty array if count == 0.
"description":"The fastest javascript implementation of a double-ended queue. Maintains compatability with deque.",
"version":"2.0.1",
"description":"The fastest javascript implementation of a double-ended queue. Used by the official Redis, MongoDB, MariaDB & MySQL libraries for Node.js and many other libraries. Maintains compatability with deque.",