在TreeData中找出所有父级

201 阅读1分钟

功能描述

通用的从特定的treeData中根据特定字段的值 找出所有的父级特定字段
比如从treeData中找出id=5的所有父级的id

参数说明

origin:在那个数据里查找
value:要查找的值是什么
fieldName:要查找的值是什么字段
needFieldName:需要返回的是什么字段,默认取fieldName
childrenName:children字段名称

补充

特定字段是在整个treeData中唯一的,比如key,id

代码

interface TreeDataFindParentParams {
  /** 原始数据 */
  origin: any[]
  /**  要查找对比的值 */
  value: string | number
  /** 要查找对比的字段名称,默认是id */
  fieldName?: string
  /** 需要返回的是什么字段,默认取fieldName */
  needFieldName?: string
  /** children字段名称,默认是children */
  childrenName?: string
}
/** TreeData查找所有父级 */
function TreeDataFindParent({
  origin = [],
  fieldName = 'id',
  childrenName = 'children',
  value = '',
  needFieldName = fieldName,
}: TreeDataFindParentParams) {
  let temp: any[] = []
  function loop(arr: any[], value: string | number) {
    arr.forEach((x: any) => {
      if (Array.isArray(x[childrenName]) && x[childrenName].length) {
        if (x[childrenName].map((y: any) => y[fieldName]).includes(value)) {
          temp.push(x[needFieldName])
          loop(origin, x[fieldName])
        } else {
          loop(x[childrenName], value)
        }
      }
    })
  }
  loop(origin, value)
  return temp
}
export default TreeDataFindParent

使用方法

image.png