suchen

Heim  >  Fragen und Antworten  >  Hauptteil

javascript – Stellen Sie eine Frage zum js-zu-json-Traversal


Wenn ich beispielsweise eine ID von 4 finden möchte, sollte ich [1,3,4] zurückgeben.
Wenn ich eine ID von 9 finden möchte, sollte ich [1,3,9] zurückgeben Wenn ich eine ID von 7 finden möchte, ändere sie so, dass sie [6,7] zurückgibt
Ich weiß nicht, ob ich es klar erklärt habe. Danke für die Antwort

淡淡烟草味淡淡烟草味2737 Tage vor453

Antworte allen(4)Ich werde antworten

  • 大家讲道理

    大家讲道理2017-05-19 10:37:55

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

    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]

    Antwort
    0
  • 滿天的星座

    滿天的星座2017-05-19 10:37:55

    你可以把代码贴出来么……你这样放个图片很难处理啊……

    Antwort
    0
  • 巴扎黑

    巴扎黑2017-05-19 10:37:55

    直接递归遍历啊,先校验id是否相同,相同直接return,不同则看是否有children,有则记录下当前层的id并继续向下遍历,无则清空记录并跳过当前的节点,遍历下一个同层节点。

    Antwort
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-19 10:37:55

    function solution(arr,id){
    var ans=[];
    var flag=false;
    function dps(obj,depth){
        ans[depth]=obj.id;
        if(obj.id==id){
            flag = true;
        }else{
            if(obj.children)
            for(var i=0;i<obj.children.length;i++){
                flag = dps(obj.children[i],depth+1);
                if(flag)
                    break;
            }
        }
        if(flag)
            return flag;
        ans[depth]=undefined;
    }
    arr.forEach(function(a){if(dps(a,0))return;})
    return ans.filter(function(obj){return undefined!=obj;});
    }

    Antwort
    0
  • StornierenAntwort