2.5 KiB
yallist
Yet Another Linked List
There are many doubly-linked list implementations like it, but this one is mine.
For when an array would be too big, and a Map can't be iterated in reverse order.
basic usage
var yallist = require('yallist')
var myList = yallist.create([1, 2, 3])
myList.push('foo')
myList.unshift('bar')
// of course pop() and shift() are there, too
console.log(myList.toArray()) // ['bar', 1, 2, 3, 'foo']
myList.forEach(function (k) {
// walk the list head to tail
})
myList.forEachReverse(function (k, index, list) {
// walk the list tail to head
})
var myDoubledList = myList.map(function (k) {
return k + k
})
// now myDoubledList contains ['barbar', 2, 4, 6, 'foofoo']
// mapReverse is also a thing
var myDoubledListReverse = myList.mapReverse(function (k) {
return k + k
}) // ['foofoo', 6, 4, 2, 'barbar']
var reduced = myList.reduce(function (set, entry) {
set += entry
return set
}, 'start')
console.log(reduced) // 'startfoo123bar'
api
The whole API is considered "public".
Functions with the same name as an Array method work more or less the same way.
There's reverse versions of most things because that's the point.
Yallist
Default export, the class that holds and manages a list.
Call it with either a forEach-able (like an array) or a set of arguments, to initialize the list.
The Array-ish methods all act like you'd expect. No magic length, though, so if you change that it won't automatically prune or add empty spots.
Yallist.create(..)
Alias for Yallist function. Some people like factories.
yallist.head
The first node in the list
yallist.tail
The last node in the list
yallist.length
The number of nodes in the list. (Change this at your peril. It is not magic like Array length.)
yallist.toArray()
Convert the list to an array.
yallist.forEach(fn, [thisp])
Call a function on each item in the list.
yallist.forEachReverse(fn, [thisp])
Call a function on each item in the list, in reverse order.
yallist.get(n)
Get the data at position n in the list. If you use this a lot,
probably better off just using an Array.
yallist.getReverse(n)
Get the data at position n, counting from the tail.
yallist.map(fn, thisp)
Create a new Yallist with t