树结构,转换
type TreeNode {children?: TreeNode[][key: string]: any}/*** 给树结构补充 canSelect 字段* 规则* 1. 当前级别 3可选* 2. 当前级别 3但没有子节点也可选* 3. 其他不可选** param tree 树数据* param level 起始层级默认从 1 开始* returns 新树*/export function setTreeCanSelectT extends TreeNode(tree: T[],level 1): ArrayT { canSelect: boolean } {if (!Array.isArray(tree)) return []return tree.map((node) {const children Array.isArray(node.children) ? node.children : []const hasChildren children.length 0const canSelect level 3 || !hasChildrenreturn {...node,canSelect,children: hasChildren? setTreeCanSelect(children, level 1): []}})}取值type TreeNode {label: stringvalue: string | numberchildren?: TreeNode[][key: string]: any}/*** 树拍平*/function flattenTree(tree: TreeNode[]): TreeNode[] {const result: TreeNode[] []const dfs (nodes: TreeNode[]) {nodes.forEach((node) {result.push(node)if (node.children node.children.length) {dfs(node.children)}})}dfs(tree)return result}/*** 根据 valueList 获取节点对象列表*/export function getNodesByValues(tree: TreeNode[],valueList: Arraystring | number): TreeNode[] {if (!Array.isArray(tree) || !Array.isArray(valueList)) return []const flatList flattenTree(tree)const valueSet new Set(valueList)return flatList.filter((node) valueSet.has(node.value))}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2549532.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!