cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Tanya soalan tentang js to json traversal


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

淡淡烟草味淡淡烟草味2737 hari yang lalu454

membalas semua(4)saya akan balas

  • 大家讲道理

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

    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]

    balas
    0
  • 滿天的星座

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

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

    balas
    0
  • 巴扎黑

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

    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.

    balas
    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;});
    }

    balas
    0
  • Batalbalas