获取tree最深的level

103 阅读1分钟

用来记录总是忘; 感兴趣的小伙伴可以写在评论里进行持续优化呦~~~

/**
 * @function maxLength
 * @description 获取当前tree最大的层级是多少
 * @param items 当前数据
 * @param args { childrenKey: 'children', levelMax: null as any, num: 1 }
 *              childrenKey:是子节点的key;levelMax:最大层级,不用传;num:循环的当前层级,一级:1 ,二级:2 ,...
 */
export function maxLength(items: Array<IFormData>, args = { childrenKey: 'children', levelMax: null as any, num: 1 }) {
  // 判空
  if (!items || items.length === 0) {
    return 0
  }
  // 计算最高level的默认值
  if (!args.levelMax || args.levelMax === null) {
    args.levelMax = 1
  }
  // 当前层级的默认值
  if (!args.num || args.num === null) {
    args.num = 1
  }

  // 保存当前的最大值
  if (args.num > args.levelMax) {
    args.levelMax = JSON.parse(JSON.stringify(args.num))
  }
  for (let i = 0; i < items.length; i += 1) {
    if (!!items[i][args.childrenKey] && items[i][args.childrenKey].length > 0) {
      const maxN = maxLength(items[i][args.childrenKey], {
        ...args,
        num: args.num + 1
      })
      // 保存最新的最大值
      if (maxN > args.levelMax) {
        args.levelMax = JSON.parse(JSON.stringify(maxN))
      }
    }
  }
  return args.levelMax
}