array
let tree = [
{
label: '一级 1',
pid: '0',
id: '1',
children: [{
label: '二级 1-1',
pid: '1',
id: '2',
children: [{
label: '三级 1-1-1',
pid: '2',
id: '3',
}]
}]
},
{
label: '一级 2',
pid: '0',
id: '4',
children: [{
label: '二级 2-1',
pid: '4',
id: '5',
children: [{
label: '三级 2-1-1',
pid: '5',
id: '6',
}]
}, {
label: '二级 2-2',
pid: '4',
id: '7',
children: [{
label: '三级 2-2-1',
pid: '7',
id: '8',
}]
}]
},
{
label: '一级 3',
pid: '0',
id: '9',
children: [{
label: '二级 3-1',
pid: '9',
id: '10',
children: [{
label: '三级 3-1-1',
pid: '10',
id: '11',
type: '人员'
}]
}, {
label: '二级 3-2',
pid: '9',
id: '12',
children: [{
pid: '12',
id: '13',
label: '三级 3-2-1'
}]
}]
}
]
// let res = []
// function treeToArray(tree, array) {
// if (Array.isArray(tree) && tree.length) {
// tree.forEach(item => {
// if (item.children && item.children.length) {
// treeToArray(item, array)
// } else {
// array.push(item)
// }
// })
// }
// return array
// }
// let bb = treeToArray(tree, res)
function TreeToArray(tree) {
// 判断 tree 是否有值,无返回 []
if (!Array.isArray(tree) || !tree.length) return []
let res = []
tree.forEach(v => {
// tree的每个元素都 放入到 res里面
let obj = { ...v }
delete obj.children
res.push(obj)
if (v.children) {
// 有children 就把 children数据递归 返回 依次放到 res里面
res.push(...TreeToArray(v.children))
}
})
return res
}
let array = TreeToArray(tree)
let handle1 = array.filter(item => item.type === '人员')//
let handle2 = []
//重组 找到根
function handlefind(result) {
if (!Array.isArray(result) || !result.length) return []
let res = []
result.forEach(v => {
// tree的每个元素都 放入到 res里面
res.push(v)
if (v.pid && v.pid !== '0') {
let parent = [array.find(item => item.id == v.pid)]
res.push(...handlefind(parent))
}
})
return res
}
let aaa = handlefind(handle1)
function ArrayToTree(arr, pid = 0) {
// 判断 arr 是否是数组
if (!Array.isArray(arr) || !arr.length) return []
let newArr = []
arr.forEach(v => {
// 判断 pid 是否相同 相同就插入进去,切递归一下children,有值就继续递归,没值就返回[]
if (v.pid == pid) {
newArr.push({
...v, children: ArrayToTree(arr, v.id)
})
}
})
// 返回值
return newArr
}
let newtree = ArrayToTree(aaa)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探