dll
v0.2.0
Published
a lightweight, fast & flexible doubly linked list
Downloads
17
Readme
dll
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"
Caveats
- 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.
API
var LinkedList = require('dll');
LinkedList.config.idPropertyName
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.
new LinkedList()
Create a new linked list.
list.first
Type: Node
The first node in the list.
If the list is empty, list.first
will be null
.
list.last
Type: Node
The last node in the list.
If the list is empty, list.last
will be null
.
list.length
The number of objects in the list.
list.add(obj)
Add an object to a list. If a list already contains the object, this will have no effect on the list.
Always returns obj
list.remove(obj)
Remove an object from the list.
Returns obj
if the object was removed, false
if it was not part of the list
list.clear(obj)
Removes all objects from the list and sets its length to zero.
list.each(function (obj) {/* ... */})
Call a function for every object in the list.
Node
A container representing a location within the list.
Node.obj
Type: Object
The object that is at this location in the list.
Node.next
Type: Node
The node that follows this node.
If this is the last node in the list, next
will be null
.
Node.prev
Type: Node
The node that precedes this node.
If this is the first node in the list, prev
will be null
.
License
Apache 2.0
Install
npm install dll --save