JavaScript 树状数组根据子节点查找所有父节点
const findPatentValue = (array, value, valueName = 'value', childrenName = 'children') => {
if (!value || !Array.isArray(array)) return []
const result = []
let valid = false
const seek = (array, value) => {
let parentValue = null
const up = (array, value, lastValue) => {
array.forEach(v => {
const val = v[valueName]
const child = v[childrenName]
if (val === value) {
valid = true
parentValue = lastValue
return
}
if (child && child.length) up(child, value, val)
})
}
up(array, value)
if (parentValue) {
result.unshift(parentValue)
seek(array, parentValue)
}
}
seek(array, value)
return valid ? [...result, value] : []
}
Test
const array = [
{
value: 'A',
children: [
{
value: '_A1',
children: [
{
value: '__A1'
}
]
},
{
value: '_A2'
}
]
},
{
value: 'B',
children: [
{
value: '_B1'
},
{
value: '_B2',
children: [
{
value: '__B2',
children: [
{
value: '___B2',
children: [
{
value: '____B2'
}
]
}
]
}
]
},
{
value: '_B3',
children: [
{
value: '__B3',
children: [
{
value: '___B3',
}
]
}
]
}
]
}
]
console.log(findParent(array, '___B2')) // => ["B", "_B2", "__B2", "___B2"]
为之则易,不为则难。
本文作者:Code_You
本文链接:https://www.cnblogs.com/coderDemo/p/14297938.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步