js 树形结构数据 已知某一子节点 一次向上获取所有父节点

var res = [{
    code: 1,
    name: "湖北省",
    children: [{
        code: 1,
        name: "武汉市",
        children: [{
            code: 1,
            name: "汉阳区",
            children: [{
                code: 1,
                name: "水上分局1"
            }]
        }, {
            code: 1,
            name: "武昌区",
            children: [{
                code: 1,
                name: "水上分局2"
            }]
        }, {
            code: 1,
            name: "汉口区",
            children: [{
                code: 1,
                name: "水上分局3"
            }]
        }]
    }, {
        code: 1,
        name: "十堰市",
        children: [{
            code: 1,
            name: "郧阳区",
            children: [{
                code: 1,
                name: "安阳镇"
            }]
        }, {
            code: 1,
            name: "茅箭区",
            children: [{
                code: 1,
                name: "小川乡"
            }]
        }]
    }]
}]

已知树形结构 res。现在有一个对象是{code: 1,name: "水上分局"},想向上依次获取取得父级,比如说水上分局 父节点是汉阳区 汉阳区父节点是武汉市 武汉市父节点是湖北省 最后将 汉阳区 武汉市 湖北省 存起来 求指点

阅读 11.6k
2 个回答
function treeFindPath (tree, func, path = []) {
  if (!tree) return []
  for (const data of tree) {
    // 这里按照你的需求来存放最后返回的内容吧
    path.push(data.name)
    if (func(data)) return path
    if (data.children) {
      const findChildren = treeFindPath(data.children, func, path)
      if (findChildren.length) return findChildren
    }
    path.pop()
  }
  return []
}

调用

treeFindPath(res, data=> data.name==='水上分局')

打印调用结果

["湖北省","武汉市","汉阳区","水上分局"]

随手给你写一个函数吧,这个确实比一般递归复杂那么一点点,就是要记录一下你遍历过的节点。

操作数据,循环遍历
var str = ''

for(var i =0;i<res.length;i++){
    var sheng = res[i].name;
    for(var j =0;j<res[i].children.length;j++){
        var shi = res[i].children[j].name;
        for(var k =0;k<res[i].children[j].children.length;k++){
            var xian = res[i].children[j].children[k].name;
            for(var l =0;l<res[i].children[j].children[k].children.length;l++){
                var zhen = res[i].children[j].children[k].children[l].name;
                这个地方可以写个判断
                str = sheng+'-'+shi+'-'+xian+'-'+zhen+';'
            }
        }
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏