yallist
又一个链表
有很多类似的双链表实现,但是这个 一个是我的。
当数组太大,而Map不能迭代时 相反的顺序。
基本用法
import { Yallist } from 'yallist'
var myList = new Yallist([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
整个API被认为是“公共的”。
与Array方法同名的函数或多或少地工作于 同样的方式。
大多数事情都有相反的版本,因为这才是重点。
Yallist
默认导出,保存和管理列表的类。
使用forEach-able(如数组)或一组 参数,以初始化列表。
数组类方法的行为都与您所期望的一样。没有魔法长度, 但是,如果你改变了,它不会自动修剪或添加 空的地方。
Yallist.create (. .)
Yallist函数的别名。有些人喜欢工厂。
yallist.head
列表中的第一个节点
yallist.tail
列表中的最后一个节点
yallist.length
列表中的节点数。(如果改变,后果自负。它是 不像数组长度那么神奇。)
yallist.toArray ()
将列表转换为数组。
yallist。forEach (fn, [thisp])
对列表中的每个项目调用一个函数。
yallist。forEachReverse (fn, [thisp])
对列表中的每一项按相反顺序调用函数。
yallist.get (n)
获取位置上的数据 n 在列表中。如果你经常用这个,
也许最好使用数组。
yallist.getReverse (n)
获取位置上的数据 n从尾巴开始数。
yallist。thisp地图(fn)
使用调用函数的结果创建一个新的Yallist 项。
yallist。thisp mapReverse (fn)
一样 map,但反过来。
yallist.pop ()
从列表尾部获取数据,并从列表中删除尾部。
yallist。推动(项,…)
将一个或多个项目插入到列表的尾部。
yallist。initialValue减少(fn)
像Array.reduce。
yallist.reduceReverse
像数组。减少,但反过来。
yallist.reverse
把列表倒过来。
yallist.shift ()
从列表头获取数据,并从列表中删除列表头。
yallist。片([的],[])
就像Array一样。切片,但返回一个新的Yallist。
yallist。sliceReverse([的],[])
就像yallist一样。切片,但是返回的结果是相反的。
yallist。splice(start, deleteCount,…)
像Array.splice。
yallist.toArray ()
创建列表的数组表示形式。
yallist.toArrayReverse ()
创建列表的反向数组表示。
yallist。未(项,…)
将一个或多个项插入到列表的头部。
yallist.unshiftNode(节点)
将Node对象移动到列表的前面。(也就是说,把它拉出来 无论它住在哪里,让它成为新的头。)
如果节点属于不同的列表,那么该列表将删除它 第一。
yallist.pushNode(节点)
将Node对象移动到列表的末尾。(也就是说,把它拉出来 不管它住在哪里,把它变成新的尾巴。)
如果节点已经属于一个列表,那么该列表将删除它 第一。
yallist.removeNode(节点)
从列表中删除一个节点,保留head的引用完整性 尾部和其他节点。
将抛出一个错误,如果你试图让一个列表删除一个节点 不属于它。
Yallist。节点
保存数据的类,实际上是列表。
电话 const n = new Node(value, previousNode, nextNode)
请注意,如果您对节点本身进行直接操作,则非常 很容易进入列表被打破的奇怪状态。小心点:)
node.next
列表中的下一个节点。
node.prev
列表中的前一个节点。
node.value
节点包含的数据。
node.list
该节点所属的列表。(如果不属于,则为空) 任何列表。)