# @denq/iron-tree 中文文档

规范地址：https://npmcn.com/package/%40denq/iron-tree/

版本：1\.3\.3
npm 元数据更新时间：2022-04-05T03:46:22.102Z
中文译文更新时间：2026-11-12T05:51:34.393Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40denq/iron-tree
原文对照：https://npmcn.com/package/%40denq/iron-tree/?lang=original
项目主页：https://github.com/DenQ/iron-tree#readme
源码仓库：https://github.com/DenQ/iron-tree

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：33.6 kB，16 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- 运行依赖：0 个
- 首次发布：2017-09-05T17:36:38.907Z
- 最新版本发布：2022-03-23T16:13:40.961Z
- 近 30 天下载量：2787（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：7（近 12 个月 0 个）

## 中文简介

构建树和多种操纵方法

## 安装

```sh
npm install @denq/iron-tree
```

也可以使用：`pnpm add @denq/iron-tree`、`yarn add @denq/iron-tree`、`bun add @denq/iron-tree`

## README

# 铁树

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

# 安装

`npm install @denq/iron-tree --save`

# 基准使用

```js
// 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(',');
```

```js
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`
    -   实例
    
    ```js
      const object = { id: 1, title: 'Root' };
      const tree = new Tree(object);
    ```
    
-   **添加( 标准、 对象)** 如果标准属实,则在树上添加节点.
    
    -   段落
        -   标准(节点) - `function` 或者说 `string`如果 `string` 那么标准是 **"根"(根)**
        -   对象 - 节点的内容
    -   返回时 `IronTree`
    -   实例
    
    ```js
    const object = { id: 1, title: 'Root' };
    const tree = new Tree();
    const resultTree = tree.add('root', object);
    ```
    
    ```js
    const regularObject = { id:2, title: 'Node 2'}
    const resultTree = tree.add((parentNode) => {
        return parentNode.get('id') === 1;
    }, regularObject);
    ```
    
-   **.remove( 标准)** 如果标准属实,则从树上去除节点.
    
    -   段落
        -   标准(节点) - 返回 `boolean`
    -   返回时 `boolean`
    -   实例
    
    ```js
    const result = tree.remove((currentNode) => {
        return currentNode.get('id') === 7;
    });
    ```
    
-   **. 容器(标准)** 根据标准在树上搜索节点.
    
    -   段落
        -   标准(节点) - 返回 `boolean`
    -   返回时 `Node`
    -   实例
    
    ```js
    const targetNode = tree.contains((currentNode) => {
        return currentNode.get('id') === 7;
    });
    ```
    
-   **类型(比较)** 排序一棵树.
    
    -   段落
        -   比较(a:节点,b:节点) - 比较函数
    -   返回时 `null`
    -   实例
    
    ```js
    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`
    -   实例
    
    ```js
    const search = (currentNode) => currentNode.get('id') === 7;
    const destination = (currentNode) => currentNode.get('id') === 3;
    const result = tree.move(search, destination);
    ```
    
-   **.versal(标准,回调)** 绕过树并按标准为每个节点调用函数.
    
    -   段落
        -   标准(节点) - 返回 `boolean`
        -   回调( 节点)
    -   返回时 `null`
    -   实例
    
    ```js
    const criteria = (currentNode) => currentNode.get('id') === 7;
    tree.traversal(criteria, (currentNode) => {
        currentNode.set('some', true);
    });
    ```
    
    ```js
    tree.traversal(null, (currentNode) => {
        if (currentNode.get('id')%2 === 0) {
          currentNode.set('some', true);
        }
    });
    ```
    
-   **.to Json( 选项)** 以 json 格式代表一棵树.
    
    -   段落
        -   选项 - `object`可选
            -   空子 - 类型 `boolean`。允许空子。 默认 `true`
            -   密钥( C) - 类型 `string`。儿童字段名称。 默认 `children`
    -   返回时 `object`
    -   实例
    
    ```js
    const json = tree.toJson();
    ```
    

* * *

# 节点

这是节点管理课.

### 属性

-   **内容** 节点的内容
    -   类型 `object`
-   **儿童** 节点儿童
    -   类型 `array`
-   **长度** 节点子女数
    -   类型 `number`

### 方法

-   **构造器( json)**
    
    -   段落
        -   json - 简单 `json` 对象
    -   实例
    
    ```js
    const rootContent = {
      id: 1,
      name: 'Root',
    }
    let node = new Node(rootContent);
    ```
    
-   **添加( 儿童)** 将一童子入结.
    
    -   返回时 `Node` - 创建节点
    -   段落
        -   儿童类型 `object`贾森
    -   实例
    
    ```js
    const rootContent = {
      id: 1,
      name: 'Root',
    }
    let node = new Node(rootContent);
    const childNode = node.add({ id: 2, name: 'Two node'});
    ```
    
-   **.remove( 标准)** 根据标准删除一个儿童节点.
    
    -   返回 - 删除 `Node`
    -   段落
        -   标准 - 删除节点的标准功能
    -   实例
    
    ```js
    const removedNodes = node.remove((itemNode) => {
        return itemNode.get('id') === 3;
    })
    ```
    
-   **.get(路径)** 按字段名称访问节点内容 .
    
    -   返回时 `mixed`
    -   段落
        -   路径 - 节点对象的密钥名称。 举个例子 `id` 或者说 `fullname`等,还有...
    -   实例
    
    ```js
      node.get('id'); // 1
      node.get('name') // "Some name"
    ```
    
-   **. set(路径,值)** 在节点内容中设置值或创建新字段.
    
    -   返回时 `boolean`
    -   段落
        -   路径 - `String` 字段名称
        -   数值 - `mixed`
    -   实例
    
    ```js
    node.set('id', 100)); // returned `true`. Node.content.id = 100
    node.get('id'); // 100
    ```
    
-   **类型(比较)** 排序子节点
    
    -   返回时 `null`
    -   段落
        -   比较 - 自定义排序函数
    -   实例
    
    ```js
    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` 当节点标准属实时开火
    -   实例
    
    ```js
    // for all nodes
    node.traversal(null, (currentNode) => {
      const name = currentNode.get('name');
      currentNode.set('name', `${name}!`);  // Last symbol "!"
    });
    ```
    
    ```js
    // 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`
    -   考试
    
    ```js
    const path = targetNode.getPath();
    const pathString = path
      .map((item) => item.get('id'))
      .join(','); // 1,3,4,5,6
    ```
    

* * *

## TDD 数据

`npm test`

## 常见问题

### @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 和提交记录判断。

