
Product
Introducing Tier 1 Reachability: Precision CVE Triage for Enterprise Teams
Socket’s new Tier 1 Reachability filters out up to 80% of irrelevant CVEs, so security teams can focus on the vulnerabilities that matter.
abstract-data
Advanced tools
A library of abstract data types for JavaScript and Node.js. Currently supports stacks and linked lists
#Basic abstract data types for JavaScript Built by Audun Bjornerud Mo. @audun, audun.io
npm install abstract-data
var abs = require('abstract-data');
or clone the repo and put abstract.js
with your project and import with:
<script src="abstract.js"></script>
Current types:
Planned types:
Stacks have five attributes: .length, .push(), .pop(), .pushAll(), .popAll(), and are instantiated as empty by:
Client-side
var abs = new AbstractJS();
myStack = new abs.Stack();
Node
var abs = require('abstract-data');
myStack = news abs.Stack();
###Basics
Stack.push(item)
pushes item
onto the stack.Stack.pop()
retrieves the last item to pushed, and removes it from the the stack.Stack.length
holds the length of the stack as a number###Advanced
####Stack.pushAll(Object || Array input, string modifier, bool reverse)
Stack.pushAll()
takes a parameter input
that is either an array or a generic JS-object, and an optionalmodifier
given as a string. modifier
changes the manner in which input
is pushed onto the stack, if input
is an object. It is entirely optional.
#####Arrays
The default behavior for Stack.pushAll(array) is to push from left to right, that is array[0]
to array[array.length - 1]
. However, if the last parameter is true
, then this order is turned around.
Example:
var abs = new AbstractJS(),
myStack = new abs.Stack(),
myArray = [1,2, 'three', function(){return '4'}];
myStack.pushAll(myArray);
//results in a stack with order: 1,2, 'three', function(){return '4'}
myStack.popAll() //Empties the stack
myStack.pushAll(myArray, '', true)
//results in a stack with order: function(){return '4'}, 'three', 1,2
######Objects
The default behavior for Stack.pushAll(object) is to push key-value pairs of the form {key : value}
. The modifier can here be used to only record keys, or only record values
Example:
var abs = new AbstractJS();
myStack = new abs.Stack(),
myObj = {
key_one : val_one,
key_two : vale_two,
key_three : val_three
};
myStack.pushAll(myObj);
//results in a stack like: {key_one : value_one}, {key_two : value_two}, {key_three : value_three}
myStack.popAll(); //Empties the stack
myStack.pushAll(myObj, 'keys');
//results in a stack like: key_one, key_two, key_three
myStack.popAll();
myStack.pushall(myObj, 'values');
//results in a stack like: value_one, value_two, value_three
####Stack.popAll(callback(popped))
Stack.popAll()
takes an optional callback
. This callback is given the popped item as a parameter. The callback executes, and then repeats with the next object on the stack until the stack is empty. If no callback is specified, the stack will be emptied.
For example:
var abs = new AbstractJS();
executionStack = new abs.Stack(),
numbersToDouble = [1,2,3,4,5,6],
results = [];
executionStack.pushAll(numbersToDouble);
executionStack.popAll(function(popped){
results.append(popped * 2);
});
##Linked Lists
Linked lists consist of a set of nodes, each of which containing a reference
to the next node in the sequence. Instantiating an empty Linked List is done by:
```
var abs = new AbstractJS(),
LL = new abs.LinkedList();
```
####LLNodes
LLNodes are the constituent parts of a Linked List. They are instantiated, always with
a 'value' and 'next' property (undefined if this is the last node), like this:
```
var abs = new AbstractJS(),
LLNodeTwo = new abs.LLNode('this is my value', undefined),
LLNodeOne = new abs.LLNode('this is the first value', LLNodeTwo);
```
LLNodes can be added to a linked list manually by LinkedList.addNode(LLNode)
but there are also two other ways of adding LLNodes:
######LinkedList.addAllNodes(startingNode)
This starts at the given node, then recursively adds startingNode.next, continuing
until it hits a node where node.next
is undefined
######LinkedList.makeFromArray(array)
This loops over the given array, adding the elements as it goes. The elements
do not have to be LLNodes. Suppose array[i]
is not undefined.
If array[i+1]
is also not undefined, an LLNode is created with myLLNode.value = array[i]
and myLLNode.next = array[i+1]
, otherwise myLLNode.next = undefined
and the loop stops. This LLNode is then added to the Linked List.
LinkedList.length
is a number, containing the length of the Linked List.LinkedList.iterateOver(callback(node))
iterates over all the nodes in the list, and executes a callback on themFAQs
A library of abstract data types for JavaScript and Node.js. Currently supports stacks and linked lists
We found that abstract-data demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket’s new Tier 1 Reachability filters out up to 80% of irrelevant CVEs, so security teams can focus on the vulnerabilities that matter.
Research
/Security News
Ongoing npm supply chain attack spreads to DuckDB: multiple packages compromised with the same wallet-drainer malware.
Security News
The MCP Steering Committee has launched the official MCP Registry in preview, a central hub for discovering and publishing MCP servers.