Skip to content

flattenTree

将树形结构扁平化为一维数组

树形结构

[
  {
    "id": 1,
    "name": "根节点1",
    "children": [
      {
        "id": 2,
        "name": "子节点1-1",
        "children": [
          {
            "id": 4,
            "name": "孙节点1-1-1"
          }
        ]
      },
      {
        "id": 3,
        "name": "子节点1-2"
      }
    ]
  },
  {
    "id": 5,
    "name": "根节点2",
    "children": [
      {
        "id": 6,
        "name": "子节点2-1"
      }
    ]
  }
]

扁平化结果

[
  {
    "id": 1,
    "name": "根节点1",
    "level": 0
  },
  {
    "id": 2,
    "name": "子节点1-1",
    "level": 1
  },
  {
    "id": 4,
    "name": "孙节点1-1-1",
    "level": 2
  },
  {
    "id": 3,
    "name": "子节点1-2",
    "level": 1
  },
  {
    "id": 5,
    "name": "根节点2",
    "level": 0
  },
  {
    "id": 6,
    "name": "子节点2-1",
    "level": 1
  }
]

函数签名

typescript
interface FlattenTreeOptions {
  childrenKey?: string
  addLevel?: boolean
  levelKey?: string
}

function flattenTree<T>(tree: T | T[], options?: FlattenTreeOptions): T[]

参数

参数名类型必填说明
treeT | T[]树形数据(数组或单个节点)
optionsFlattenTreeOptions配置选项

返回值

类型说明
T[]扁平化后的一维数组

工作原理

  1. 将输入转换为数组格式
  2. 递归遍历每个节点
  3. 提取节点数据(排除children字段)
  4. 如果启用addLevel,添加层级信息
  5. 递归处理子节点,层级+1
  6. 返回扁平化数组