npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

double-linkedlist

v1.0.4

Published

A double linked list data structure for storing data

Downloads

14

Readme

DOUBLE LINKED LIST Build Status

Breaking Change - Migrating to V1.0.0

Version 1.0.0 changed the way you instantiate for node. See the getting started section for more on how to get started. Also please see change log for deprecated methods.

Getting Started

This is a simple double linked list. It has some tests but still use discretion. You will have to create a new object to use it so for browsers...

var linkedList =  new DoubleLinkedList()

and for node...

var DoubleLinkedList = require('double-linkedlist').DoubleLinkedList;
var linkedList =  new DoubleLinkedList();

Changelog v1.0.0

  • Updated documentation
  • Updated build. Now includes minified version.
  • Converted the build to UMD. As a result the instantiation process for node has changed.
  • Cycle method has been removed. Please use Psychic method instead.

Table of Contents

DoubleLinkedList

Double Linked List

Meta

  • author: Michael Montaque

onChange

Will trigger all the functions given to it when objects are added, removed or moved.

Parameters

  • func function called when a change occurs

canUndo

determines if there are any more undo left

Returns boolean

undo

will undo the last modifying command

clearUndo

removes all the undo that the user can perform

isEmpty

is this data list empty?

Returns boolean

getSize

Returns the size of this list

Returns Number

insertAtStart

Inserts data at the start of the list

Parameters

insertAtEnd

Inserts data at the end of the list

Parameters

insertAtPosition

Inserts data at a specified position the list

Parameters

deleteAtPosition

removes a node at the specified position

Parameters

  • position Number index of the node you want to remove

deleteAll

removes all the nodes

removeNode

removes a node at the specified position

Parameters

  • comparitor Comparitor function that cycles through each element returning the node and index. The user must return true or false to indicate whether or not the node should be removed.
  • isReversed {Boolean} to cycle through the list in reverse

Examples

list.removeNode(function(node, idx){
     return node.id === 4
},true)

getTail

Returns Object the node at the end of the list

getHead

Returns Object the node at the start of the list

move

moves the object

Parameters

  • oldIdx Number the index of the object you want to move
  • newIdx Number the index you want to move the old object to

psychic

cycles through each node and returns it along with the previous node, the next node and the index to the callback. To break free from the cycle the user can return false or let it run to the end

Parameters

  • callback Psychic-Callback function that cycles through each element returning the node and index.
  • isReversed Boolean to cycle through the list in reverse

Examples

list.psychic(function(currentNode, previousNode, nextNode, idx){
     // Do something with the node
     // return true to keep going or false to stop
})

toArray

returns an array of the data

Returns Array the internal data as an array

findAll

removes a node at the specified position

Parameters

  • comparitor (Comparitor | Object) function that cycles through each element returning the node and index. The user must return true or false to indicate whether or not the node should be removed. Or it can be an object and the method will find any node that matches the attribute's data

Examples

var array = list.findAll(function(node, idx){
     return node.id === 4
})

var list = list.findAll({id:4})

Psychic-Callback

Type: Function

Parameters

  • currentNode LinkNode The current node object in the list
  • previousNode LinkNode The previous node object in the list
  • nextNode LinkNode The next node object in the list
  • idx Number index of the object in the list

Returns boolean Optionally the user can return false to break free from the cycle early

Comparitor

Type: Function

Parameters

  • node LinkNode object in the list
  • idx Number index of the object in the list

Returns boolean the user should return true any time a condition is met while comparing the node

Callback

Type: Function

Parameters

  • node LinkNode object in the list
  • idx Number index of the object in the list

Returns boolean Optionally the user can return false to break free from the cycle early

LinkNode

class that represents the nodes that make up the list. Each of the node are referenced to at most two other nodes - a previous and a next.

Parameters

  • data any object to store
  • nextNode a node to reference as next
  • previousNode a node to reference as previous

getNext

returns the node that is after the node that called this method

Returns any LinkNode

getPrevious

returns the node that is before the node that called this method

Returns any LinkNode

setNext

takes a node object and sets it as the next node in the linked list

Parameters

  • obj Node the node object you want to set as next

setPrevious

takes a node object and sets it as the previous node in the linked list

Parameters

  • obj Node the node object you want to set as previous

hasNext

true if there is another node linked after the node that is caller of this method

Returns any Boolean

hasPrev

true if there is another node linked before the node that is caller of this method

Returns any Boolean

getProtectedData

Returns any Object

Meta

  • deprecated: Will be removed by version 1.0.0. (Please use the getData data method instead)

appendData

allows you to set data in the internal object.

Parameters

  • data Object the information you want to store the node
  • key String the property you want to store the data at

getDataForKey

getter for the internal data stored in the node

Parameters

  • key String the attribute property name to access the data

setData

sets the internal data object

Parameters

  • data Object the information you want to store the node