javascript - 請教一個js對json遍歷的問題
淡淡烟草味
淡淡烟草味 2017-05-19 10:35:55
0
4
465


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

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

淡淡烟草味
淡淡烟草味

全部回覆(4)
大家讲道理

很多人都在抱怨你沒有把程式碼貼出來,能回答問題的人可都是真心的!
簡化版實驗原始資料(也供其他人可以驗證自己的方案)

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]
滿天的星座

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

巴扎黑

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

给我你的怀抱

雷雷

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板