recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Poser une question sur la traversée js vers json


Par exemple, si je veux trouver un identifiant de 4, je dois retourner [1,3,4]
Si je veux trouver un identifiant de 9, je dois retourner [1,3,9]
Si je veux trouver un identifiant de 7, changez-le pour revenir [6,7]

Je ne sais pas si je l’ai expliqué clairement. Merci pour la réponse

淡淡烟草味淡淡烟草味2801 Il y a quelques jours489

répondre à tous(4)je répondrai

  • 大家讲道理

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

    Beaucoup de gens se plaignent que vous n’ayez pas posté le code, mais ceux qui peuvent répondre aux questions sont sincères !
    Version simplifiée des données expérimentales originales (également pour que d'autres puissent vérifier leurs propres solutions)

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

    Résultats de sortie de recherche 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]

    répondre
    0
  • 滿天的星座

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

    Pouvez-vous poster le code... C'est difficile de traiter une image comme celle-ci...

    répondre
    0
  • 巴扎黑

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

    Parcours récursif direct, vérifiez d'abord si les identifiants sont les mêmes, revenez directement s'ils sont identiques, s'ils sont différents, vérifiez s'il y a des enfants, enregistrez l'identifiant du calque actuel et continuez à parcourir vers le bas. Sinon, effacez l'enregistrement, ignorez le nœud actuel et parcourez le nœud suivant au même niveau.

    répondre
    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;});
    }

    répondre
    0
  • Annulerrépondre