需求描述:
树形结构的数据,获取子节点的所有父级节点方法,
思路:
循环节点,判断是否是默认节点,是则保存到数组,否则判断是否有子节点,有则调用本身循环,并进行数组合并,没有子节点就重置数组并进入下一个循环,直到查到指定默认节点时,返回数组。
代码:
var res = [
{
"value": "pk",
"label": "北京市",
"children": {
"name": "block",
"label": "请选择",
"options": [
{
"value": "hd",
"label": "海淀区"
},
{
"value": "cp",
"label": "昌平区"
},
{
"value": "cy",
"label": "朝阳区"
}
]
}
},
{
"value": "sc",
"label": "四川省",
"children": {
"name": "city",
"label": "请选择",
"options": [
{
"value": "cd",
"label": "成都市",
"children": {
"name": "block",
"label": "请选择",
"options": [
{
"value": "gx",
"label": "高新区"
},
{
"value": "qy",
"label": "青羊区"
}
]
}
},
{
"value": "my",
"label": "绵阳市",
"children": {
"name": "block",
"label": "请选择",
"options": [
{
"value": "jn",
"label": "金牛区"
}
]
}
},
{
"value": "lz",
"label": "泸州市"
},
{
"value": "dy",
"label": "德阳市"
},
{
"value": "ms",
"label": "眉山市"
},
{
"value": "ls",
"label": "乐山市"
},
{
"value": "yb",
"label": "宜宾市"
},
{
"value": "ya",
"label": "雅安市"
},
{
"value": "zg",
"label": "自贡市"
},
{
"value": "pzh",
"label": "攀枝花市"
},
{
"value": "sn",
"label": "遂宁市"
},
{
"value": "nc",
"label": "南充市"
},
{
"value": "nj",
"label": "内江市"
},
{
"value": "dz",
"label": "达州市"
},
{
"value": "ga",
"label": "广安市"
}
]
}
}
]
function treeFindPath(tree, func, path = []) {
if (!tree) return []
for (const index in tree) {
console.log(111, tree[index], func(tree[index]))
// 这里按照你的需求来存放最后返回的内容吧
path.push(tree[index].value)
if (func(tree[index])) {
return path
}
if (tree[index].children) {
const findChildren = treeFindPath(tree[index].children.options, func, path)
if (findChildren.length) return findChildren
}
path.pop()
}
return []
}
//调用
let path = []
path = treeFindPath(res, data => data.value === 'jn')