2016-05-26 3 views
0

Ich habe Daten mit Kindern, ich muss Element nach Name finden und den Pfad zu Element drucken. Ich habe Suchfunktionen geschrieben, die das Element finden, aber nicht mit PATH umgehen können. Wo soll ich damit umgehen? Wie kann ich einen Pfad hinzufügen oder entfernen?Finden Sie Wert in JSON Baum und geben Sie den Pfad

let data = { 
type: "folder", 
name: "animals", 
children: [ 
    { 
     type: "folder", 
     name: "cat", 
     children: [ 
      { 
       type: "folder", 
       name: "images", 
       children: [ 
        { 
         type: "file", 
         name: "cat001.jpg" 
        }, { 
         type: "file", 
         name: "cat002.jpg" 
        } 
       ] 
      }, 
      { 
       type: "folder", 
       name: "images", 
       children: [ 
        { 
         type: "file", 
         name: "cat001.jpg" 
        }, { 
         type: "file", 
         name: "cat002.jpg" 
        } 
       ] 
      } 
     ] 
    }, 
    { 
     type: "folder", 
     name: "dog", 
     children: [ 
      { 
       type: "folder", 
       name: "images", 
       children: [ 
        { 
         type: "file", 
         name: "dog001.jpg" 
        }, { 
         type: "file", 
         name: "dog002.jpg" 
        } 
       ] 
      } 
     ] 
    }, 
    { 
     type: "file", 
     name: "horse.png" 
    }, 
    { 
     type: "file", 
     name: "bear.png" 
    }, 
    { 
     type: "file", 
     name: "horse.png" 
    } 
] 

};

search(data, name, path = "") { 
    if (data.name == name) { 
     let path = [data.name]; 
     return path; 
    } else if (data.children != null) { 
     let result = null; 
     for (let i = 0; result == null && i < data.children.length; i++) { 
      result = this.search(data.children[i], name); 
     } 
     return result; 
    } 
    return null; 
} 

Antwort

1

auf den Pfad Fügen Sie einfach, wenn Sie etwas gefunden haben:

… if (data.children != null) { 
    for (let i = 0; i < data.children.length; i++) { 
     let result = this.search(data.children[i], name); 
     if (result) { 
      result.unshift("children", i); // or whatever you want in your path 
      return result; 
     } 
    } 
} 
Verwandte Themen