天网网站建设,网站维护费用一年多少,蓬莱建设管理局网站,投融资平台【JS】检索树结构#xff0c;并返回结果节点的路径与子节点 需求代码效果展示 需求
一个树结构#xff0c;需要添加条件检索功能#xff0c;检索结果依然是一个树结构#xff0c;包含所有的符合要求的节点#xff0c;以及他们到根节点的路径#xff0c;与他们的子节点
… 【JS】检索树结构并返回结果节点的路径与子节点 需求代码效果展示 需求
一个树结构需要添加条件检索功能检索结果依然是一个树结构包含所有的符合要求的节点以及他们到根节点的路径与他们的子节点
代码
searchTree(departments, queryParams) {// 用于克隆具有匹配子项的节点的辅助函数const cloneWithChildren (node) {return {...node,children: node?.children?.map(cloneWithChildren) || [], // 克隆所有的子节点};};// 核心递归搜索功能function searchNode(node, queryParams) {let judge () {let name queryParams.deptName ? node.deptName.includes(queryParams.deptName) : true;let status [0, 1].includes(queryParams.status )? queryParams.status node.status : true;return name status;//这里是我个人的搜索条件一个名称的模糊查询与状态值匹配。};if (judge()) {// 如果当前节点包含关键词克隆整个节点连同其子节点return cloneWithChildren(node);}if (node.children) {const matchingChildren node.children.map((child) searchNode(child, queryParams)).filter((child) child ! null);if (matchingChildren.length 0) {// 如果任何子节点包含匹配项则克隆父节点并连接匹配的子节点return { ...node, deptName: node.deptName, children: matchingChildren };}}// 如果当前节点和子节点都不包含关键词则不包含它在内return null;}// 递归遍历部门列表并构建结果树return departments.map((dept) searchNode(dept, queryParams)).filter((dept) dept ! null);},效果展示