TreeData 树结构数据类
liz-q 2020/12/28
创建一个管理树结构数据的实例,针对这棵树提供很多操作方法。
# 例子
import { TreeData } from '@liz-q/utils'
const tree = [{
id: 1,
label: '一级 1',
children: [{
id: 4,
label: '二级 1-1',
children: [{
id: 9,
label: '三级 1-1-1'
}, {
id: 10,
label: '三级 1-1-2'
}]
}]
}]
const treeData = new TreeData(tree, {
key: 'id',
children: 'children'
})
# 实例化参数
tree
(Array) :树结构数据treeProps
(Object) :配置参数treeProps.key
(String) : 指定唯一项 key 字段名,默认是 idtreeProps.children
(String) :指定子树字段名,默认 childrentreeProps.isLeaf
(String) :指定是否是叶子节点字段名,默认是 isLeaf
# 实例方法
getNode
(id)=>node :获取节点cloneDeepTree
()=>tree: 深拷贝一棵树traverseTree
(cb: (node, parentNode, index)=>void, condition: (node) => boolean)=>void :遍历树,满足condition
条件的节点执行cb
函数filterTree
(condition: (node) => boolean, newTree: boolean) => tree :过滤树,condition
是条件函数,newTree
标识是否返回一颗新树,当为true
时,不改变原树,当为false
时,原树可能会被改变,不传默认为true
getLeafs
() => node[] : 获取叶子节点getSubTreeByLevel
(level: number) => tree :获取 1 到 level 级子树getTreeLevel
(id) => {max: number, targetLevel: number} :获取树的最大层级,以及目标节点所在层级addChild
(parentId, child) => void : 添加子节点removeChild
(parentId) => void : 删除所有子节点
# 类静态方法
type FunctionVoid = (...args: any[]) => void
type FunctionBoolean = (...args: any[]) => boolean
interface ObjectAny {
[key:string]: any
}
interface TreePropsType {
key?: string;
children?: string;
isLeaf?: string;
}
interface FlatListPropsType {
key: string;
parentKey: string;
}
type TreeDataItemType = ObjectAny;
type TreeDataType = Array<TreeDataItemType>;
class BaseTree {
/**
* @function 获取指定节点
* @param nodes {array} 树数据
* @param val {any} key字段对应的值
* @param _props
* */
static _getNode(nodes: TreeDataType | undefined, val: any, _props: TreePropsType): ObjectAny | undefined;
/**
* @function 遍历树,满足条件的节点将会执行回调函数
* @param nodes {array} 树数据
* @param cb {(node, parentNode, index) => {}} 回调函数
* @param condition {(node) => boolean} 条件函数
* @param _props
* */
static _traverseTree(nodes: TreeDataType | undefined, cb: FunctionVoid, condition: FunctionBoolean | undefined, _props: TreePropsType): void;
/**
* @function 过滤树
* @param nodes {array} 树数据
* @param condition {(node)=>boolean} 条件函数
* @param _props
* */
static _getFilterTree(nodes: TreeDataType | undefined, condition: FunctionBoolean, _props: TreePropsType): ObjectAny[];
/**
* @function 获取所有叶子节点组成的数组
* @param nodes {array} 树数据
* @param _props
* */
static _getLeafs(nodes: TreeDataType | undefined, _props: TreePropsType): ObjectAny[];
/**
* @function 获取固定层级以上的子树
* @param nodes {array} 树数据,最好深拷贝一棵树,避免改变原树
* @param level {number} 限制层级
* */
static _getSubTreeByLevel(nodes: TreeDataType | undefined, level: number, _props: TreePropsType): TreeDataType;
/**
* @function 获取树的最大层级,以及目标节点所在层级
* @param nodes {array} 树结构
* @param val {any} 目标节点key对应的值
* */
static _getTreeLevel(nodes: TreeDataType | undefined, val: any, _props: TreePropsType): {
max: number;
targetLevel: number;
};
/**
* @function 将树结构拉平,自动填充id和pid,id的值取_props中key对应的值,pid指父节点id
* @param nodes
* @param _props
* */
static _getFlatTree(nodes?: TreeDataType, _props?: TreePropsType): object[];
/**
* @function 将一维树数据转换成标准树结构
* @param flatList 一维树数据
* @param _props 配置信息,指定 key 字段和 parentKey 字段
* */
static _getTreeFromFlat(flatList?: TreeDataType, _props?: FlatListPropsType): any[];
/**
* @function 刪除节点
* @param node {object, string, number} 数据对象或主键值
* @param nodes {array} 树数据
* @param _props {TreePropsType}
* */
static _deleteNode(node: TreeDataItemType | string | number, nodes?: TreeDataType, _props?: TreePropsType): void;
/**
* @function 提供一个方法,获取节点所在数组的索引和所在数组
* @param nodes {array} 树数据
* @param val {any} key字段对应的值
* @param _props
* */
static _getNodeInfo(nodes: TreeDataType | undefined, val: any, _props: TreePropsType): ObjectAny | undefined;
tree: TreeDataType;
treeProps: TreePropsType;
constructor(tree: TreeDataType, treeProps?: TreePropsType);
}