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种遍历策略,无非是处理节点的时机不同:前序遍历是在遇到节点时即处理,中序是在处理完左节点后再处理,而...