@denq/iron-tree

中文文档
1.3.3发布于 2022/03/24MITCommonJS零依赖近 30 天下载 2787

构建树和多种操纵方法

中文使用文档
文档目录5 节
  1. 属性
  2. 方法
  3. 属性
  4. 方法
  5. TDD 数据

铁树

此软件包会构建一棵树, 并给出许多有用的方法来管理一棵树及其节点

安装

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可选
    • 返回时 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 对象
    • 实例
    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

版本与发布记录

@denq/iron-tree 共发布 7 个版本,首次发布于 2017/09/06;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.3.3latest2022/03/244 年前
1.3.22018/10/168 年前
1.3.12018/08/038 年前
1.3.02017/09/159 年前
1.2.02017/09/159 年前
1.1.02017/09/079 年前

关于 @denq/iron-tree 的常见问题

@denq/iron-tree 是什么?

构建树和多种操纵方法

如何安装 @denq/iron-tree?

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

@denq/iron-tree 支持 TypeScript 吗?

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

@denq/iron-tree 支持 ESM 还是 CommonJS?

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

@denq/iron-tree 可以商用吗?

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

@denq/iron-tree 的下载量有多少?

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

@denq/iron-tree 还在维护吗?

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