符号树
将任何对象的集合转换成自己的高效树或链接列表 Symbol。 。 。 .
这个库旨在为DOM树提供高效的支撑数据结构. 您也可以使用此库作为高效链接列表 。 任何元数据都直接存储在您的对象上,这保证了任何类型的插入或删除在恒定的时间内进行. 因为一个ES6 Symbol ,元数据不会以任何方式干扰对象.
支持Node.js 4+,io.js和现代浏览器.
示例
链接列表 :
const SymbolTree = require('symbol-tree');
const tree = new SymbolTree();
let a = {foo: 'bar'}; // or `new Whatever()`
let b = {foo: 'baz'};
let c = {foo: 'qux'};
tree.insertBefore(b, a); // insert a before b
tree.insertAfter(b, c); // insert c after b
console.log(tree.nextSibling(a) === b);
console.log(tree.nextSibling(b) === c);
console.log(tree.previousSibling(c) === b);
tree.remove(b);
console.log(tree.nextSibling(a) === c);
树:
const SymbolTree = require('symbol-tree');
const tree = new SymbolTree();
let parent = {};
let a = {};
let b = {};
let c = {};
tree.prependChild(parent, a); // insert a as the first child
tree.appendChild(parent,c ); // insert c as the last child
tree.insertAfter(a, b); // insert b after a, it now has the same parent as a
console.log(tree.firstChild(parent) === a);
console.log(tree.nextSibling(tree.firstChild(parent)) === b);
console.log(tree.lastChild(parent) === c);
let grandparent = {};
tree.prependChild(grandparent, parent);
console.log(tree.firstChild(tree.firstChild(grandparent)) === a);
见 日记 需要更多的文件记录.
测试
请先安装依赖性 :
npm install
您现在可以通过执行 :
npm test
线路和分行覆盖率应当为100%.
API 文档
符号树
作者: 约里斯·范德韦尔 [email protected] (英语)
- 符号树
- 符号结构 ⏏
- 新符号Tree( [描述])
- 初始化(对象) ⇒
Object - 儿童(对象) ⇒
Boolean - 第一个孩子(对象) ⇒
Object - . last 儿童(对象) ⇒
Object - . 先前的兄弟姐妹(对象) ⇒
Object - .next 兄弟姐妹(对象) ⇒
Object - 父对象 ⇒
Object - .last 包容性演示文稿(对象) ⇒
Object - . preference(对象,[可选 ) ⇒
Object - 。跟踪(对象,[选项]) ⇒
Object - . children To Array( 父, [选项]) ⇒
Array.<Object> - .祖先ToArray(对象,[选项]) ⇒
Array.<Object> - .treetoArray(根,[可选 ) ⇒
Array.<Object> - . 儿童测量器(父母,[选择]) ⇒
Object - . 先前的兄弟姐妹标识器(对象) ⇒
Object - .next 姊妹星(对象) ⇒
Object - . 祖先测量器(对象) ⇒
Object - .treater (根, 选项) ⇒
Object - .index(儿童) ⇒
Number - 儿童(家长) ⇒
Number - .compareTreePosition(左边,右边) ⇒
Number - .remove( 移动对象) ⇒
Object - 插入前( 参考对象、 新对象) ⇒
Object - 后插入( 引用对象, 新对象) ⇒
Object - . 预付儿童(参考对象,新对象) ⇒
Object - 附录儿童(参考对象,新对象) ⇒
Object
- 符号结构 ⏏
符号
新符号Tree( [描述])
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
| [说明] | string | "'SymbolTree data'" | 符号使用的说明 |
符号 Tree. 初始化(对象) QQ Object
您可以使用此功能在对象创建后( 可选择) 初始化 , 利用V8的快质. 如果你愿意的话,同样有用 冻结你的物体.
O(1)
仁爱: 实例方法 SymbolTree
回返数字 : Object - 对象
| 参数 | 类型 |
|---|---|
| 对象 | Object |
符号 Tree.has 儿童(对象) QQ Boolean
回返 true 如果物体有子女。 否则它会回来 false。 。 。 .
O(1)
仁爱: 实例方法 SymbolTree
| 参数 | 类型 |
|---|---|
| 对象 | Object |
符号 Tree. First Child(对象) QQ Object
返回给定对象的第一个孩子.
O(1)
仁爱: 实例方法 SymbolTree
| 参数 | 类型 |
|---|---|
| 对象 | Object |
符号Tree.Last Child(对象) QQ Object
返回给定对象的最后一个孩子.
O(1)
仁爱: 实例方法 SymbolTree
| 参数 | 类型 |
|---|---|
| 对象 | Object |
符号Tree. previous Sibling(对象) QQ Object
返回给定对象的上一个兄弟姐妹.
O(1)
仁爱: 实例方法 SymbolTree
| 参数 | 类型 |
|---|---|
| 对象 | Object |
符号Tree.nextSibling(对象) QQ Object
返回给定对象的下个兄弟姐妹.
O(1)
仁爱: 实例方法 SymbolTree
| 参数 | 类型 |
|---|---|
| 对象 | Object |
符号 Tree.parent(对象) QQ Object
返回给定对象的父对象 .
O(1)
仁爱: 实例方法 SymbolTree
| 参数 | 类型 |
|---|---|
| 对象 | Object |
符号Tree.last 包含的 Descendant(对象) QQ Object
查找在给定对象树序上最后的包容性后人.
O(n)(最坏的情况)n是树的深处object
仁爱: 实例方法 SymbolTree
| 参数 | 类型 |
|---|---|
| 对象 | Object |
符号Tree.preplease(对象,[可选 ) QQ Object
查找给定对象(B)的上一个对象(A). 如果A和B在同一棵树上,则物体A在物体B之前 a依树序在B之前出现.
O(n)(最坏情况)O(1)(走整个树时被摊销)
仁爱: 实例方法 SymbolTree
| 参数 | 类型 | 说明 |
|---|---|---|
| 对象 | Object | |
| [可选 | Object | |
| [选项.root] | Object | 如果设定, root 必须是返回值(或返回无效)的包容性祖先。 这个支票 假设 那个 root 也是给定的包容性祖先 object |
符号Tree. following(对象,[可选 ) QQ Object
查找给定对象(B)的以下对象(A). 如果天体A和B在同一棵树上,则天体A跟随天体B a依树序排列在B后面.
O(n)(最坏的情况)n是整个树上的对象数量O(1)(走整个树时被摊销)
仁爱: 实例方法 SymbolTree
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
| 对象 | Object | ||
| [可选 | Object | ||
| [选项.root] | Object | 如果设定, root 必须是返回值(或返回无效)的包容性祖先。 这个支票 假设 那个 root 也是给定的包容性祖先 object | |
| [选项.skip儿童] | Boolean | false | 如果设定, 请忽略 object |
符号 Tree. children to Array(父, [选项]) QQ Array.<Object>
将给定对象的所有子程序添加到数组中.
O(n)地点n是给定孩子的数量parent
仁爱: 实例方法 SymbolTree
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
| 父目录 | Object | ||
| [可选 | Object | ||
| [选项.阵 | Array.<Object> | [] | |
| [选项.filter] | function | 在每个对象添加到数组之前测试其功能 。 以参数(对象)引出. 应返回 true 如果将一个对象包括在内. | |
| [选项。 这个 阿尔格 | * | 要使用的数值 this 执行时 filter。 。 。 . |
符号Tree.asters ToArray(对象,[可选 ) QQ Array.<Object>
将给定对象的所有包容性祖先添加到数组中.
O(n)地点n是给定的祖先的数量object
仁爱: 实例方法 SymbolTree
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
| 对象 | Object | ||
| [可选 | Object | ||
| [选项.阵 | Array.<Object> | [] | |
| [选项.filter] | function | 在每个对象添加到数组之前测试其功能 。 以参数(对象)引出. 应返回 true 如果将一个对象包括在内. | |
| [选项。 这个 阿尔格 | * | 要使用的数值 this 执行时 filter。 。 。 . |
符号Tree.treetoArray(根,[可选 ) QQ Array.<Object>
将给定对象的所有后裔添加到数组中(按树序排列).
O(n)地点n是给定子树上的对象数量object
仁爱: 实例方法 SymbolTree
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
| 根号 | Object | ||
| [可选 | Object | ||
| [选项.阵 | Array.<Object> | [] | |
| [选项.filter] | function | 在每个对象添加到数组之前测试其功能 。 以参数(对象)引出. 应返回 true 如果将一个对象包括在内. | |
| [选项。 这个 阿尔格 | * | 要使用的数值 this 执行时 filter。 。 。 . |
符号Tree.ChildrenIterator(父母,[可选 ) QQ Object
以给定对象的所有儿童标注
O(1)单次重复
仁爱: 实例方法 SymbolTree
回返数字 : Object - 一个可移动的延后器(ES6)
| 参数 | 类型 | 默认 |
|---|---|---|
| 父目录 | Object | |
| [可选 | Object | |
| [可选.反 | Boolean | false |
符号Tree. previous SiblingsIterator(对象) QQ Object
分布于给定对象的所有先前的兄弟姐妹. (倒数树序)
O(1)单次重复
仁爱: 实例方法 SymbolTree
回返数字 : Object - 一个可移动的延后器(ES6)
| 参数 | 类型 |
|---|---|
| 对象 | Object |
符号Tree.next 姊妹关系编辑器(对象) QQ Object
覆盖给定对象的后继兄弟姐妹。 (按树序排列)
O(1)单次重复
仁爱: 实例方法 SymbolTree
回返数字 : Object - 一个可移动的延后器(ES6)
| 参数 | 类型 |
|---|---|
| 对象 | Object |
符号Tree.astersIterator(对象) QQ Object
覆盖特定对象的所有包容性祖先
O(1)单次重复
仁爱: 实例方法 SymbolTree
回返数字 : Object - 一个可移动的延后器(ES6)
| 参数 | 类型 |
|---|---|
| 对象 | Object |
符号 Tree.treeIterator( 根, 选项) QQ Object
以树序排列在给定对象的所有后人上.
何处 n 是给定子树上的对象数量 root数字 :
O(n)(单次重复最坏的情况)O(n)(摊销,完成执行器时)
仁爱: 实例方法 SymbolTree
回返数字 : Object - 一个可移动的延后器(ES6)
| 参数 | 类型 | 默认 |
|---|---|---|
| 根号 | Object | |
| 选项 | Object | |
| [可选.反 | Boolean | false |
符号Tree.index(孩子) Number
查找给定对象的索引( 先前的兄弟姐妹数) .
O(n)地点n是前兄弟姐妹的数量O(1)(被摊销,如果树没有被修改)
仁爱: 实例方法 SymbolTree
回返数字 : Number - 前兄弟姐妹的人数,或者如果物体没有父母,则为-1
| 参数 | 类型 |
|---|---|
| 儿童 | Object |
符号 Tree. Count( 父母) QQ Number
计算孩子的数量.
O(n)地点n儿童数量O(1)(被摊销,如果树没有被修改)
仁爱: 实例方法 SymbolTree
| 参数 | 类型 |
|---|---|
| 父目录 | Object |
符号Tree.compareTreePosition(左,右) QQ Number
比较一个对象相对于另一个对象的位置。 返回一个位集 :
- 失踪人数:1人
- 预告: 2
- 后续行动:4
- 内装: 8
- 来文日期: 16
语义与比较 DOM 中的DocumentPosition 相同,但 断绝与其它任何一点.
地点 n 财务报告和审定财务报表 m 其祖先数量 left 财务报告和审定财务报表 right· ;
地点 o 是指具有下列特征的儿童人数: left 财务报告和审定财务报表 right数字 :
O(n + m + o)(最坏情况)O(n + m)(被摊销,如果树没有被修改)
仁爱: 实例方法 SymbolTree
| 参数 | 类型 |
|---|---|
| 左边 | Object |
| 对 | Object |
符号Tree.remove(删除对象) QQ Object
从此树上移除对象 . 如果已经删除, 无效 .
O(1)
仁爱: 实例方法 SymbolTree
回返数字 : Object - 删除对象
| 参数 | 类型 |
|---|---|
| 删除对象 | Object |
符号Tree. 插入前( 引用对象, 新对象) QQ Object
在引用对象之前插入给定对象.
newObject 现在是前一个兄弟 referenceObject。 。 。 .
O(1)
仁爱: 实例方法 SymbolTree
回返数字 : Object - 新对象
掷出数字 :
Error如果新对象已在此符号特雷中存在
| 参数 | 类型 |
|---|---|
| 引用对象 | Object |
| 新对象 | Object |
符号 Tree. 插入后( 引用对象, 新对象) QQ Object
在引用对象后插入给定对象.
newObject 现在是下一个兄弟 referenceObject。 。 。 .
O(1)
仁爱: 实例方法 SymbolTree
回返数字 : Object - 新对象
掷出数字 :
Error如果新对象已在此符号特雷中存在
| 参数 | 类型 |
|---|---|
| 引用对象 | Object |
| 新对象 | Object |
符号 Tree. prepend Child( 引用对象, 新对象) QQ Object
将给定对象作为给定参考对象的第一个孩子插入.
newObject 现在,是第一个孩子 referenceObject。 。 。 .
O(1)
仁爱: 实例方法 SymbolTree
回返数字 : Object - 新对象
掷出数字 :
Error如果新对象已在此符号特雷中存在
| 参数 | 类型 |
|---|---|
| 引用对象 | Object |
| 新对象 | Object |
符号Tree.append Child(参考对象,新对象) QQ Object
将给定对象作为给定参考对象的最后一个孩子插入.
newObject 现在,是最后一个孩子 referenceObject。 。 。 .
O(1)
仁爱: 实例方法 SymbolTree
回返数字 : Object - 新对象
掷出数字 :
Error如果新对象已在此符号特雷中存在
| 参数 | 类型 |
|---|---|
| 引用对象 | Object |
| 新对象 | Object |