铁树
此软件包会构建一棵树, 并给出许多有用的方法来管理一棵树及其节点
安装
npm install @denq/iron-tree --save
基准使用
// create tree
const object = { id: 1, title: 'Root' };
const tree = new Tree(object);
// add nodes
const regularObject = { id:2, title: 'Node 2'}
tree.add((parentNode) => {
return parentNode.get('id') === 1;
}, regularObject);
// contains node
const targetNode = tree.contains((currentNode) => {
return currentNode.get('id') === 2;
});
// remove node
const result = tree.remove((currentNode) => {
return currentNode.get('id') === 2;
});
// traversal
const criteria = (currentNode) => currentNode.get('id') === 1;
tree.traversal(criteria, (currentNode) => {
currentNode.set('some', true);
});
// getPath
const criteria = (currentNode) => currentNode.get('id') === 6;
const targetNode = tree.contains(criteria);
const path = targetNode.getPath();
const pathString = path
.map((item) => item.get('id'))
.join(',');
function compareById(vector) {
return (a, b) => {
const aid = Number(a.get('id'));
const bid = Number(b.get('id'));
if (aid > bid) {
return vector ? 1 : -1;
} else if (aid < bid) {
return vector ? -1 : 1;
} else {
return 0
}
};
}
tree.sort(compareById(false)); // desc
以下是现有的其他方法.
树
这是树类的管理.
属性
- 根节点 根树节点
- 类型
Node
- 类型
方法
-
构造器( 对象)
- 段落
- 对象 - json
object可选
- 对象 - json
- 返回时
IronTree - 实例
const object = { id: 1, title: 'Root' }; const tree = new Tree(object); - 段落
-
添加( 标准、 对象) 如果标准属实,则在树上添加节点.
- 段落
- 标准(节点) -
function或者说string如果string那么标准是 "根"(根) - 对象 - 节点的内容
- 标准(节点) -
- 返回时
IronTree - 实例
const object = { id: 1, title: 'Root' }; const tree = new Tree(); const resultTree = tree.add('root', object);const regularObject = { id:2, title: 'Node 2'} const resultTree = tree.add((parentNode) => { return parentNode.get('id') === 1; }, regularObject); - 段落
-
.remove( 标准) 如果标准属实,则从树上去除节点.
- 段落
- 标准(节点) - 返回
boolean
- 标准(节点) - 返回
- 返回时
boolean - 实例
const result = tree.remove((currentNode) => { return currentNode.get('id') === 7; }); - 段落
-
. 容器(标准) 根据标准在树上搜索节点.
- 段落
- 标准(节点) - 返回
boolean
- 标准(节点) - 返回
- 返回时
Node - 实例
const targetNode = tree.contains((currentNode) => { return currentNode.get('id') === 7; }); - 段落
-
类型(比较) 排序一棵树.
- 段落
- 比较(a:节点,b:节点) - 比较函数
- 返回时
null - 实例
function compareById(vector) { return (a, b) => { const aid = Number(a.get('id')); const bid = Number(b.get('id')); if (aid > bid) { return vector ? 1 : -1; } else if (aid < bid) { return vector ? -1 : 1; } else { return 0 } }; } tree.sort(compareById(false)); //Desc - 段落
-
移动( 标准、 目的地) 根据标准将想要的分支或节点移动到目的地的节点或分支.
- 段落
- 标准(节点) - 回调
- 目标(节点) - 回调
- 返回时
boolean - 实例
const search = (currentNode) => currentNode.get('id') === 7; const destination = (currentNode) => currentNode.get('id') === 3; const result = tree.move(search, destination); - 段落
-
.versal(标准,回调) 绕过树并按标准为每个节点调用函数.
- 段落
- 标准(节点) - 返回
boolean - 回调( 节点)
- 标准(节点) - 返回
- 返回时
null - 实例
const criteria = (currentNode) => currentNode.get('id') === 7; tree.traversal(criteria, (currentNode) => { currentNode.set('some', true); });tree.traversal(null, (currentNode) => { if (currentNode.get('id')%2 === 0) { currentNode.set('some', true); } }); - 段落
-
.to Json( 选项) 以 json 格式代表一棵树.
- 段落
- 选项 -
object可选- 空子 - 类型
boolean。允许空子。 默认true - 密钥( C) - 类型
string。儿童字段名称。 默认children
- 空子 - 类型
- 选项 -
- 返回时
object - 实例
const json = tree.toJson(); - 段落
节点
这是节点管理课.
属性
- 内容 节点的内容
- 类型
object
- 类型
- 儿童 节点儿童
- 类型
array
- 类型
- 长度 节点子女数
- 类型
number
- 类型
方法
-
构造器( json)
- 段落
- json - 简单
json对象
- json - 简单
- 实例
const rootContent = { id: 1, name: 'Root', } let node = new Node(rootContent); - 段落
-
添加( 儿童) 将一童子入结.
- 返回时
Node- 创建节点 - 段落
- 儿童类型
object贾森
- 儿童类型
- 实例
const rootContent = { id: 1, name: 'Root', } let node = new Node(rootContent); const childNode = node.add({ id: 2, name: 'Two node'}); - 返回时
-
.remove( 标准) 根据标准删除一个儿童节点.
- 返回 - 删除
Node - 段落
- 标准 - 删除节点的标准功能
- 实例
const removedNodes = node.remove((itemNode) => { return itemNode.get('id') === 3; }) - 返回 - 删除
-
.get(路径) 按字段名称访问节点内容 .
- 返回时
mixed - 段落
- 路径 - 节点对象的密钥名称。 举个例子
id或者说fullname等,还有...
- 路径 - 节点对象的密钥名称。 举个例子
- 实例
node.get('id'); // 1 node.get('name') // "Some name" - 返回时
-
. set(路径,值) 在节点内容中设置值或创建新字段.
- 返回时
boolean - 段落
- 路径 -
String字段名称 - 数值 -
mixed
- 路径 -
- 实例
node.set('id', 100)); // returned `true`. Node.content.id = 100 node.get('id'); // 100 - 返回时
-
类型(比较) 排序子节点
- 返回时
null - 段落
- 比较 - 自定义排序函数
- 实例
function compareById(vector) { return (a, b) => { const aid = Number(a.get('id')); const bid = Number(b.get('id')); if (aid > bid) { return vector ? 1 : -1; } else if (aid < bid) { return vector ? -1 : 1; } else { return 0 } }; } node.sort(compareById(false)); - 返回时
-
.versal(标准,回调) 根据标准绕过儿童节点,并对其适用功能.
- 返回时
null - 段落
- 标准
function标准每个节点 - 调用 -
function当节点标准属实时开火
- 标准
- 实例
// for all nodes node.traversal(null, (currentNode) => { const name = currentNode.get('name'); currentNode.set('name', `${name}!`); // Last symbol "!" });// only for node.id == 3 node.traversal((currentNode) => currentNode.get('id') === 3, (currentNode) => { const name = currentNode.get('name'); currentNode.set('name', `${name}!`); // Last symbol "!" }); - 返回时
-
. getPath () (中文(简体) ) 这种方法返回数组节点
root node改为current node也许对面包屑有帮助.- 返回时
Array - 考试
const path = targetNode.getPath(); const pathString = path .map((item) => item.get('id')) .join(','); // 1,3,4,5,6 - 返回时
TDD 数据
npm test