2017-02-28 2 views
1

Hier ist das Beispiel für ein verschachteltes Array-Objekt. Wie werden Elternelemente rekursiv an die Kindelemente der Tabelle angehängt?Wie verschachteln Array-Objekt in eine flache Tabelle angularjs dynamisch mit rekursiven Funktion konvertieren?

Bitte beachten Sie: Es kann n Anzahl der Ebenen in verschachtelten Objekten

var data = { 
    "grandparent_id": 7, 
"parents": [ 
    { 
     "parent_id": 65, 
      "children": [ 
      { 
      "child_id": 365 
      } 
      ] 
    }, 
    { 
     "parent_id": 66, 
      "children": [ 
      { 
      "child_id": 365 
      }, 
      { 
      "child_id": 366 
      }, 
      { 
      "child_id": 367, 
        "smallchildren": [ 
       { 
       "smallchild_id": 465 
       }, 
       { 
       "smallchild_id": 466 
       }, 
       { 
       "smallchild_id": 467 
       } 
       ] 
    }  
    ] 
    } 
] 
} 

Erwartete Ausgabe sein: Das

var resultArray = [[7,65,365],[7,66,365],[7,66,366],[7,66,367]] 

Grandparent_id|parent_id|child_id 
7    |65  |365 
7    |66  |365 
7    |66  |366 
7    |66  |367 

Versuchte:

function normalize(parent) { 
    if (parent && parent.children) { 
     for (var i = 0, l = parent.children.length; i < l; ++i) { 
      var child = parent.children[i]; 
      child.index = i; 
      if (!child.parentId) child.parentId = parent.id || '0'; 
      normalize(child); 
     } 
    } 
} 
+1

Können Sie posten Sie Ihre Eingabe ut und erwartete Ausgabe als JavaScript Object/Array Literale? Das wird den Menschen helfen, dir zu helfen. – joews

+0

aktualisiert mit erwarteter Eingabe und Ausgabe. – user4101343

+0

Aufräumen komplett – user4101343

Antwort

0

Scheint eine ziemlich einfache Karte/Job zu reduzieren. Iterieren Sie einfach das Array parents und ordnen Sie das children Array einem Array von data.grandparent_id, parent.parent_id und child.child_id zu.

const data = {"grandparent_id":7,"parents":[{"parent_id":65,"children":[{"child_id":365}]},{"parent_id":66,"children":[{"child_id":365},{"child_id":366},{"child_id":367}]}]} 
 

 
const resultArray = data.parents.reduce((arr, parent) => { 
 
    return arr.concat(parent.children.map(child => 
 
    [data.grandparent_id, parent.parent_id, child.child_id])) 
 
}, []) 
 

 
console.info('resultArray =', JSON.stringify(resultArray))


Wenn Sie die inneren Arrays wollen Objekte anstatt sein, einfach die map Rückgabewert ändern ...

const data = {"grandparent_id":7,"parents":[{"parent_id":65,"children":[{"child_id":365}]},{"parent_id":66,"children":[{"child_id":365},{"child_id":366},{"child_id":367}]}]} 
 

 
const resultArray = data.parents.reduce((arr, parent) => { 
 
    return arr.concat(parent.children.map(child => ({ 
 
    grandparent_id: data.grandparent_id, 
 
    parent_id: parent.parent_id, 
 
    child_id: child.child_id 
 
    }))) 
 
}, []) 
 

 
console.info('resultArray =', resultArray)

+0

Wie können wir dies in ein Objekt von Arrays konvertieren? – user4101343

+0

Wie können wir dies in ein Objekt von Arrays konvertieren? [{Großeltern-ID: '7', Eltern-ID: '65', Kind-ID: '365'}, {Großeltern-ID: '7', Eltern-ID: '66', Kind-ID: '365'}, {Großeltern-ID: '7', Eltern-ID: '66', child_id: '366'}, {grand_id: '7', parent_id: '66', child_id: '367'}] – user4101343

+0

@ user4101343 meine aktualisierte Antwort sehen – Phil

Verwandte Themen