为了账号安全,请及时绑定邮箱和手机立即绑定

请教一个js对json遍历的问题

请教一个js对json遍历的问题

HUX布斯 2018-11-13 17:14:37
比如说 我想找得id为4,就应该返回 [1,3,4]想找得id 为9 该返回 [1,3,9]想找得id为7 改返回 [6,7]不知道我说明白没有。谢谢解答啊
查看完整描述

1 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

很多人都在抱怨你没有把代码贴出来,能回答问题的人可都是真心的!
简化版实验原始数据(也供其他人可以验证自己的方案)

var nodes = [

    {

      "id": 1, 

      "children": [

        {

          "id": 3,

          "children": [

            {"id": 4},

            {"id": 9}

          ]

        },

        {

          "id": 10

        },

      ]

    },

    {

      "id": 2

    },

    {

      "id": 6,

      "children" : [

        { "id": 5},

        { "id": 7},

        { "id": 8}

      ]

    }

];

JS查找输出结果


//递归实现

//@leafId  为你要查找的id,

//@nodes   为原始Json数据

//@path    供递归使用,不要赋值

function findPathByLeafId(leafId, nodes, path) {

  if(path === undefined) {

    path = [];

  }

  for(var i = 0; i < nodes.length; i++) {

      var tmpPath = path.concat();

      tmpPath.push(nodes[i].id);

      if(leafId == nodes[i].id) {

         return tmpPath;

      }

      if(nodes[i].children) {

        var findResult = findPathByLeafId(leafId, nodes[i].children, tmpPath);

        if(findResult) {

          return findResult;

        }

      }

  }

}


//用法

console.log(findPathByLeafId(4, nodes));   //输出 [1,3,4]

console.log(findPathByLeafId(9, nodes));   //输出 [1,3,9]

console.log(findPathByLeafId(7, nodes));   //输出 [6,7]


查看完整回答
反对 回复 2018-12-08
  • 1 回答
  • 0 关注
  • 457 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信