dll

0.2.0 • Public • Published

dll Build Status devDependency Status

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 with dll.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

Analytics

Readme

Keywords

Package Sidebar

Install

npm i dll

Weekly Downloads

22

Version

0.2.0

License

Apache 2.0

Last publish

Collaborators

  • namuol