1、源代码
// 遍历tree
const traverseTree = (trees, callback) => {
const datas = expandTree(trees, [])
datas.forEach((e) => {
callback(e)
})
}
// 展开tree
const expandTree = (trees, datas) => {
datas = datas || []
const expand = (data) => {
datas.push(data)
if (Array.isArray(data.children) && data.children.length > 0) {
data.children.forEach((item) => {
expandTree(item, datas)
})
}
}
if (Array.isArray(trees)) {
trees.forEach((item) => {
expand(item)
})
} else {
expand(trees)
}
return datas
}
// 过滤tree
const filterTree = (trees, callback) => {
const deepFilter = (list) => {
if (Array.isArray(list)) {
return list.filter((item) => {
if (Array.isArray(list.children) && list.children.length > 0) {
item.children = deepFilter(item.children)
}
return callback(item)
})
} else {
if (Array.isArray(list.children) && list.children.length > 0) {
list.children = deepFilter(list.children)
}
return callback(list) ? list : null
}
}
return deepFilter(trees)
}
export default {
list: (trees) => {
trees = JSON.parse(JSON.stringify(trees))
const datas = expandTree(trees, [])
datas.forEach((item) => {
item.children && delete item.children
})
return datas
},
find: (trees, callback) => {
return expandTree(trees, []).find((e) => callback(e))
},
filter: (trees, callback) => {
return filterTree(trees, callback)
},
forEach: (trees, callback) => {
traverseTree(trees, callback)
}
}
2、如何使用
3、结果