树形

# treeListUtil

该工具的主要作用是将后端列表数据转换为前端树形数据,供前端树形组件使用。

使用方式如下:

// 引入
import { treeListUtil } from '@/utils'

const list = [
    {
        "id": 1,
        "leaf": false,
        "name": "1"
    },
    {
        "id": 2,
        "leaf": true,
        "name": "1-1",
        "parentId": 1
    },
    {
        "id": 3,
        "leaf": true,
        "name": "1-2",
        "parentId": 1,
    },
    {
        "id": 4,
        "leaf": true,
        "name": "1-2-1",
        "parentId": 3,
    },
]
const treedata = treeListUtil(list)

console.log(treedata)

/* ==>
[
    {
        "id": 1,
        "leaf": false,
        "name": "1",
        "children": [
            {
                "id": 2,
                "leaf": true,
                "name": "1-1",
                "parentId": 1
            },
            {
                "id": 3,
                "leaf": true,
                "name": "1-2",
                "parentId": 1,
                "children": [
                    {
                        "id": 4,
                        "leaf": true,
                        "name": "1-2-1",
                        "parentId": 3
                    }
                ]
            }
        ]
    }
]
*/

# treeToList

该工具的主要作用是将树形数据转换为列表数据,并添加上层级level,方便进行前端的进一步处理,主要使用在树形组件内部中。

使用方式如下:

// 引入
import { treeToList } from '@/utils'


//  treeToList(tree, key = 'children')
const treedata = [
    {
        "id": 1,
        "leaf": false,
        "name": "1",
        "children": [
            {
                "id": 2,
                "leaf": true,
                "name": "1-1",
                "parentId": 1
            },
            {
                "id": 3,
                "leaf": true,
                "name": "1-2",
                "parentId": 1,
                "children": [
                    {
                        "id": 4,
                        "leaf": true,
                        "name": "1-2-1",
                        "parentId": 3
                    }
                ]
            }
        ]
    }
]
const list = treeToList(treedata)

console.log(list)
/**
  ==>
[
    {
        "id": 1,
        "leaf": false,
        "name": "1",
        "level": 1
    },
    {
        "id": 2,
        "leaf": true,
        "name": "1-1",
        "parentId": 1,
        "level": 2
    },
    {
        "id": 3,
        "leaf": true,
        "name": "1-2",
        "parentId": 1,
        "level": 2
    },
    {
        "id": 4,
        "leaf": true,
        "name": "1-2-1",
        "parentId": 3,
        "level": 3
    }
]

 * /

# FastTreeUtils

该工具使用了高性能的算法,提供了高效的树形节点向上,向下迭代的能力,目前主要使用在树形组件内部的复选框处理。

基本使用方式如下:

import FastTreeUtils from '@/utils'
const list = [
    {
        "id": 1,
        "leaf": false,
        "name": "1"
    },
    {
        "id": 2,
        "leaf": true,
        "name": "1-1",
        "parentId": 1
    },
    {
        "id": 3,
        "leaf": true,
        "name": "1-2",
        "parentId": 1,
    },
    {
        "id": 4,
        "leaf": true,
        "name": "1-2-1",
        "parentId": 3,
    },
]

const fastTreeUtils = new FastTreeUtils(list)

// 不断向上迭代
fastTreeUtils.upper({id:3},(node)=>{
   console.log('upper',node.name)
   // 当明确 return false 时,停止迭代
})
// 不断向下迭代
fastTreeUtils.downward({id:1},(node)=>{
  console.log('downward',node.name)
})

/*
upper 1-2
upper 1
downward 1-1
downward 1-2
downward 1-2-1
*/