export function isFunction<T extends (...args: any[]) => any | void | never>(value: T | unknown): value is T {
return Object.prototype.toString.call(value) === '[object Function]'
}
/**
* @Description: 通用递归
* @Param [] list 树形结构
* @Param fn 函数,参数为树形的每一项, return true 表示中断此次递归
* @Param {*} config, 配置项,children
* @Return {*} 无返回值
*/
export const recursion = (list = [], fn, config = { children: children }) => {
const { children } = config
const recursionFn = (arr = [], parent = null) => {
let flag = false
for( const item of arr ) {
flag = isFunction(fn) ? fn(item, parent) : false
if( flag ) {
return true // 中断递归
} else {
flag = recursionFn(item[children] || [], item)
if( flag ) {
return true
}
}
}
}
recursionFn(list)
}
// 使用
// 找出这棵树的id与父id
const listData = [{
id: 1,
parentId: 0,
children: [{
id: 2,
parentId: 1,
children: [{
id: 3,
parentId: 2,
}]
}]
}]
handleTree(){
const deptPair = []
recursion(listData, (item) => {
deptPair.push({
c: item.id,
p: item.parentId
})
})
return deptPair
}
handleTree() // [{c: 1, p: 0}, {c:2, p: 1}, {c: 3, p: 2}]
通用递归
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 原创文章,转载请务必将下面这段话置于文章开头处。本文转发自Jason’s Blog,原文链接http://www....
- 其实二叉树的3种遍历策略,无非是处理节点的时机不同:前序遍历是在遇到节点时即处理,中序是在处理完左节点后再处理,而...