symbol-tree

中文文档
3.2.4发布于 2019/06/13MITCommonJS零依赖近 30 天下载 3.2亿

使用符号将任何对象集转换为自己的高效树或链接列表

中文使用文档
文档目录5 节
  1. 示例
  2. 测试
  3. API 文档
  4. 符号树
  5. 符号

符号树

Travis CI Build Status Coverage Status

将任何对象的集合转换成自己的高效树或链接列表 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( [描述])

参数类型默认说明
[说明]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儿童]Booleanfalse如果设定, 请忽略 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
[可选.反Booleanfalse

符号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
[可选.反Booleanfalse

符号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

版本与发布记录

symbol-tree 共发布 19 个版本,首次发布于 2015/07/14;过去 12 个月发布了 0 个版本。

版本发布日期距今
3.2.4latest2019/06/137 年前
3.2.32019/06/137 年前
3.2.22017/02/129 年前
3.2.12016/12/199 年前
3.2.02016/12/119 年前
3.1.42015/11/0910 年前

关于 symbol-tree 的常见问题

symbol-tree 是什么?

使用符号将任何对象集转换为自己的高效树或链接列表

如何安装 symbol-tree?

在项目目录运行 npm install symbol-tree,或使用 pnpm add / yarn add / bun add。

symbol-tree 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/symbol-tree 是否存在。

symbol-tree 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

symbol-tree 可以商用吗?

symbol-tree 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

symbol-tree 的下载量有多少?

根据 npm 官方下载统计,symbol-tree 在 2026/10/05 – 2026/11/03 这 30 天内被下载 321,917,778 次,日均约 10,730,593 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

symbol-tree 还在维护吗?

最新版本 3.2.4 发布于 2019/06/13(7 年前);至今共发布 19 个版本,其中过去 12 个月发布了 0 个;首次发布于 2015/07/14。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。