Wondering what’s next for npm?Check out our public roadmap! »

    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

    Install

    npm i dll

    DownloadsWeekly Downloads

    459

    Version

    0.2.0

    License

    Apache 2.0

    Last publish

    Collaborators

    • avatar