搜尋

首頁  >  問答  >  主體

javascript - 請教一個js對json遍歷的問題


例如我想找得id為4,就應該回傳[1,3,4]
想找得id 為9 該回傳[1,3 ,9]
想找得id為7 改回[6,7]

不知道我說明白沒有。謝謝解答啊

淡淡烟草味淡淡烟草味2737 天前455

全部回覆(4)我來回復

  • 大家讲道理

    大家讲道理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]

    回覆
    0
  • 滿天的星座

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

    你可以把程式碼貼出來麼…你這樣放個圖片很難處理啊…

    回覆
    0
  • 巴扎黑

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

    直接遞歸遍歷啊,先校驗id是否相同,相同直接return,不同則看是否有children,有則記錄下當前層的id並繼續向下遍歷,無則清空記錄並跳過當前的節點,遍歷下一個同層節點。

    回覆
    0
  • 给我你的怀抱

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

    雷雷

    回覆
    0
  • 取消回覆