javascript - Tanya soalan tentang js to json traversal
淡淡烟草味
淡淡烟草味 2017-05-19 10:35:55
0
4
452


Contohnya, jika saya ingin mencari id 4, saya harus kembalikan [1,3,4]
Jika saya ingin mencari id 9, saya harus kembalikan [1,3,9]
Jika saya ingin mencari id 7, tukar ia untuk mengembalikan [6,7]

Saya tidak tahu sama ada saya menerangkannya dengan jelas. Terima kasih atas jawapannya

淡淡烟草味
淡淡烟草味

membalas semua(4)
大家讲道理

Ramai orang mengadu bahawa anda tidak menyiarkan kod tersebut, tetapi mereka yang boleh menjawab soalan adalah ikhlas!
Versi ringkas data asal percubaan (juga untuk orang lain mengesahkan penyelesaian mereka sendiri)

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}
      ]
    }
];

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

Boleh post kod... Susah nak proses gambar macam ni...

巴扎黑

Direct recursive traversal, periksa dahulu sama ada id sama, kembalikan terus jika sama, jika berbeza, semak jika ada anak, rekod id lapisan semasa dan teruskan ke bawah . Jika tidak, kosongkan rekod dan langkau nod semasa dan lintasi Nod seterusnya pada tahap yang sama.

给我你的怀抱
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;});
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan