2016-08-09 21 views
-1

Ich versuche, einen hierarchischen Datensatz basierend auf meinem aktuellen flachen Datensatz zu erstellen. Also, was ich würde dies wäre müssen:Wie erstellt man eine hierarchische Hierarchie aus einer flachen Datei in Javascript?

  • [0 ... 99]
    • 0: Objekt
      • Genre: "Comedy - Musical"
      • Studio: "Paramount"
      • Titel "" Titanic "
    • 1: Objekt
      • Genre: "Comedy - Musical"
      • Studio: "Buena Vista"
      • Titel“ "Monsters, Inc."
    • 2: Object

so weiter und so weiter

ich das haben möchte:

  • 0: Objekt
    • Genre : "Komödie - Musical"
      • Studio: "Paramount"
        • Titel: "Titanic"
        • Titel: "Ein weiterer Titel"
      • Studio: "Buena Vista"
        • Titel: „Monster , Inc.

Ich kann keine Methode herauszufinden, dies zu erreichen. Ich habe nur die 2-Tier-Hierarchie, aber ich brauche die dritte Ebene. Jede Hilfe würde sehr geschätzt werden!

Ich habe diese Methode.

function formatObjectToTreeStructure(data, filterName) { 

      var filterList = [], allFilterList = [], constructedObject = []; 

      data.children = data.data; 

      for (var key in data.children[0]) { 
       allFilterList.push(key); 
      } 

      for (var index = 0; index < data.children.length; index++) { 
       var temp = null; 
       var filterIndex = filterList.indexOf(data.children[index][filterName]); 
       if (filterIndex == -1) { 
        filterList.push(data.children[index][filterName]); 
        temp = {}; 
        temp[filterName] = data.children[index][filterName]; 
        temp.children = []; 

        var tempChildren = {}; 
        tempChildren[data.dataTableAlign.group1] = data.children[index][data.dataTableAlign.group1]; 
        tempChildren[data.dataTableAlign.group2] = data.children[index][data.dataTableAlign.group2]; 
        tempChildren[data.dataTableAlign.group3] = data.children[index][data.dataTableAlign.group3]; 

        temp.children.push(tempChildren); 

        constructedObject.push(temp); 

       } else { 
        var tempChildren = {}; 
        tempChildren[data.dataTableAlign.group1] = data.children[index][data.dataTableAlign.group1]; 
        tempChildren[data.dataTableAlign.group2] = data.children[index][data.dataTableAlign.group2]; 
        tempChildren[data.dataTableAlign.group3] = data.children[index][data.dataTableAlign.group3]; 

        constructedObject[filterIndex].children.push(tempChildren); 
       } 
      } 
      return constructedObject; 

     } 

Aber das ist so weit wie ich bekommen habe. Es geht jedoch nur zwei Ebenen. Ich bekomme Genre und seine Kinder, aber ich kann mir nicht vorstellen, wie man alle Titel desselben Studios bekommt.

+0

Was Sie bisher versucht haben? StackOverflow ist keine "Code this for me" -Seite. –

+0

Ich habe die Frage bearbeitet – CStreet

Antwort

0

Möglicherweise können Sie so etwas tun;

function corrugate(data){ 
 
    return data.reduce((t,o) => { 
 
           t[o.genre] ? t[o.genre][o.studio] ? t[o.genre][o.studio].push(o.title) 
 
                    : t[o.genre][o.studio] = [o.title] 
 
              : t[o.genre] = {[o.studio]: [o.title]}; 
 
           return t; 
 
           },{}); 
 
} 
 

 
var list =[{genre:"Comedy", studio: "Std_A", title: "Movie_01"}, 
 
      {genre:"Comedy", studio: "Std_B", title: "Movie_02"}, 
 
      {genre:"Western", studio: "Std_A", title: "Movie_03"}, 
 
      {genre:"Thriller", studio: "Std_A", title: "Movie_04"}, 
 
      {genre:"Action", studio: "Std_C", title: "Movie_05"}, 
 
      {genre:"Thriller", studio: "Std_C", title: "Movie_06"}, 
 
      {genre:"Western", studio: "Std_B", title: "Movie_09"}, 
 
      {genre:"Thriller", studio: "Std_B", title: "Movie_10"}, 
 
      {genre:"Action", studio: "Std_A", title: "Movie_11"}, 
 
      {genre:"Western", studio: "Std_D", title: "Movie_12"}, 
 
      {genre:"Comedy", studio: "Std_D", title: "Movie_13"}, 
 
      {genre:"Action", studio: "Std_C", title: "Movie_14"}, 
 
      {genre:"Western", studio: "Std_D", title: "Movie_15"}, 
 
      {genre:"Thriller", studio: "Std_A", title: "Movie_16"}]; 
 

 
console.log(JSON.stringify(corrugate(list),null,4));

Verwandte Themen