A lightweight, fast & flexible doubly linked list for JavaScript.
var currentID = 0;
function Food (name) {
this.name = name;
// a unique id field is required:
this._id = currentID;
currentID += 1;
}
var entityA = new Food('Bacon'),
entityB = new Food('Brocolli'),
entityC = new Food('Sausage'),
entityD = new Food('Steak');
var LinkedList = require('dll');
var list = new LinkedList();
list.add(entityA);
list.add(entityB);
list.add(entityC);
list.add(entityD);
console.log(list.length); // "4"
// Iterating is easy:
var itr = list.first;
while (itr) {
console.log(itr.obj.name);
itr = itr.next;
}
// Output:
// Bacon
// Brocolli
// Sausage
// Steak
// Or even easier:
list.each(function (obj) {
console.log (itr.obj.name);
});
assert( list.contains(entityC) === true );
list.remove(entityC);
assert( list.contains(entityC) === false );
// Iterating backwards is easy:
itr = list.last;
while (itr) {
console.log(itr.obj.name);
itr = itr.prev;
}
// Output:
// Steak
// Sausage
// Bacon
list.clear();
console.log(list.length); // "0"
- Only objects are supported. No primitives.
- Objects must have a unique ID property (default is
_id
, but it can be changed withdll.config.idPropertyName
). - Duplicate items are not supported.
var LinkedList = require('dll');
Type: String Default: "_id"
The name of the property used to uniquely identify objects.
You are required to have a unique ID property on any objects that are added to a linked list, but you can call it whatever you want by changing the string value of this property.
Create a new linked list.
Type: Node
The first node in the list.
If the list is empty, list.first
will be null
.
Type: Node
The last node in the list.
If the list is empty, list.last
will be null
.
The number of objects in the list.
Add an object to a list. If a list already contains the object, this will have no effect on the list.
Always returns obj
Remove an object from the list.
Returns obj
if the object was removed, false
if it was not part of the list
Removes all objects from the list and sets its length to zero.
Call a function for every object in the list.
A container representing a location within the list.
Type: Object
The object that is at this location in the list.
Type: Node
The node that follows this node.
If this is the last node in the list, next
will be null
.
Type: Node
The node that precedes this node.
If this is the first node in the list, prev
will be null
.
Apache 2.0
npm install dll --save