Skip to content

buildTree

树形结构构建函数(支持 level / parentId 双模式)

引入版本

0.30.0

Demo

ts
import { buildTree } from '@wyfex/iutils'

/**
 * ================== level 模式 默认 ==================
 */
const data1 = [
  { level: 0, name: '顶部' },
  { level: 1, name: '子项' },
  { level: 2, name: '孙项' }
]
console.log(JSON.stringify(buildTree(data1), null, 2))
// [
//   {
//     "level": 0,
//     "name": "顶部",
//     "children": [
//       {
//         "level": 1,
//         "name": "子项",
//         "children": [
//           {
//             "level": 2,
//             "name": "孙项"
//           }
//         ]
//       }
//     ]
//   }
// ]

/**
 * ================== parentId 模式  ==================
 */
const data2 = [
  { id: 1, parentId: 0 },
  { id: 2, parentId: 1 }
]
console.log(JSON.stringify(buildTree(data2, { mode: 'parentId' }), null, 2))
// [
//   {
//     "id": 1,
//     "parentId": 0,
//     "children": [
//       {
//         "id": 2,
//         "parentId": 1
//       }
//     ]
//   }
// ]

/**
 * ================== parentId 模式 + 自定义主键(uid + pid) ==================
 */
const data3 = [
  { uid: 2, pid: 1, name: '子节点A' },
  { uid: 1, pid: 0, name: '父节点1' },
  { uid: 3, pid: 1, name: '子节点B' },
  { uid: 4, pid: 0, name: '父节点2' }
]
console.log(
  JSON.stringify(
    buildTree(data3, { mode: 'parentId', idKey: 'uid', parentIdKey: 'pid' }),
    null,
    2
  )
)
// [
//   {
//     "uid": 1,
//     "pid": 0,
//     "name": "父节点1",
//     "children": [
//       {
//         "uid": 2,
//         "pid": 1,
//         "name": "子节点A"
//       },
//       {
//         "uid": 3,
//         "pid": 1,
//         "name": "子节点B"
//       }
//     ]
//   },
//   {
//     "uid": 4,
//     "pid": 0,
//     "name": "父节点2"
//   }
// ]

基于 MIT 许可发布