用来记录总是忘; 感兴趣的小伙伴可以写在评论里进行持续优化呦~~~
/**
* @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
}