2016-07-20 11 views
0

Wie konvertiert man unter Array mit ParentChild relationShip Basierend auf ; getrennt Werte mit Javascript. Gibt es einen schnellen Weg, es zu tun.Convert Comma-separated Strings mit Eltern Kind Beziehung

var arr = [ 
    'Dept;Accounting', 
    'Dept;ATG;Business', 
    'Dept;Cloud Services', 
    'Dept;Consulting', 
    'Dept;Education', 
    'Dept;Finance', 
    'Dept;Hardware', 
    'Dept;HR', 
    'Dept;Industries', 
    'Dept;ATG', 
    'Dept;ADIU', 
    'Dept;Legal', 
    'Dept;Marketing', 
    'Dept;Office', 
    'Dept;Products', 
    'Dept;Project Managing', 
    'Dept;Products Marketing' 
] 

Erwartete Ausgabe Sollte

var finalarr = [{ 
'Title': 'Dept', 'Childs': [ 
    { 'Title': 'Accounting' }, 
    { 
     'Title': 'ATG', 'Childs': [ 
      { 
       'Title': 'Business' 
      } 
     ] 
    }, 
    ... 
]}]; 

Es ist nur sein mag Baumansicht Typ Navigation kann

+1

Was ist das erwartete Ergebnis? – Iso

Antwort

0

Sie einfach durch die Array-Schleife erstellen und teilen jedes Element durch das ‚;‘:

var arr = ['Dept;Accounting', 'Dept;ATG;Business', 'Dept;Cloud Services', 'Dept;Consulting', 'Dept;Education', 'Dept;Finance', 'Dept;Hardware', 'Dept;HR', 'Dept;Industries', 'Dept;ATG', 'Dept;ADIU', 'Dept;Legal', 'Dept;Marketing', 'Dept;Office', 'Dept;Products', 'Dept;Project Managing', 'Dept;Products Marketing']; 
arr.forEach(function(elem, idx, arr) { 
var parentChild = elem.split(/\;(.+)?/); 
console.log('before: '+parentChild[0]+' | after: '+parentChild[1]); 
}); 
+0

Also, was ist die Ausgabe für "Dept; ATG; Business"? –

+0

Sie haben Recht. aktualisierte meine Antwort, um diesen Fall zu decken –

0

var arr = [ 
 
    'Dept;Accounting', 
 
    'Dept;ATG;Business', 
 
    'Dept;Cloud Services', 
 
    'Dept;Consulting', 
 
    'Dept;Education', 
 
    'Dept;Finance', 
 
    'Dept;Hardware', 
 
    'Dept;HR', 
 
    'Dept;Industries', 
 
    'Dept;ATG', 
 
    'Dept;ADIU', 
 
    'Dept;Legal', 
 
    'Dept;Marketing', 
 
    'Dept;Office', 
 
    'Dept;Products', 
 
    'Dept;Project Managing', 
 
    'Dept;Products Marketing' 
 
] 
 

 
function addChildren(obj, children){ 
 
obj.Title = children[0]; 
 

 
if(children.length > 1){ 
 
    obj.Children = {} 
 
    addChildren(obj.Children, children.slice(1)) 
 
} 
 
} 
 

 
arr = arr.reduce((result, current) => {debugger; 
 
    var parts = current.split(';'); 
 
    var row = {}; 
 
    addChildren(row, parts); 
 
    result.push(row); 
 
    return result; 
 
}, []); 
 

 
console.log(arr)

function addChildren(obj, children){ 
obj.Title = children[0]; 

if(children.length > 1){ 
    obj.Children = {} 
    addChildren(obj.Children, children.slice(1)) 
} 
} 

arr.reduce((result, current) => {debugger; 
    var parts = current.split(';'); 
    var row = {}; 
    addChildren(row, parts); 
    result.push(row); 
    return result; 
}, []); 

Mit Array reduzieren und eine Hilfefunktion, die Sie Kinder rekursiv addiert kann die gewünschte Ausgangs

1

I-Code würde vorschlagen, bekommen diese prägnante Baumstruktur zu erzeugen:

{ 
    "Dept": { 
    "Accounting": {}, 
    "ATG": { 
     "Business": {} 
    }, 
    "Cloud Services": {}, 
    "Consulting": {}, 
    "Education": {}, 
    "Finance": {}, 
    "Hardware": {}, 
    "HR": {}, 
    "Industries": {}, 
    "ADIU": {}, 
    "Legal": {}, 
    "Marketing": {}, 
    "Office": {}, 
    "Products": {}, 
    "Project Managing": {}, 
    "Products Marketing": {} 
    } 
} 

Wenn Sie benötigen speziell die Children-Array-Art von Struktur, dann können Sie eine zweite Funktion verwenden, die ich in dem Code unten zur Verfügung stelle, der die Ausgabe zu dem transformieren wird.

Überprüfen Sie die Ausgabe des folgenden ES6 Schnipsel:

function buildTree(arr) { 
 
    return arr.reduce((tree, csv) => { 
 
     csv.split(';').reduce((obj, title) => obj[title] = obj[title] || {}, tree); 
 
     return tree; 
 
    }, {}); 
 
} 
 

 
function convertTree(tree) { 
 
    return Object.keys(tree).map(title => { 
 
     var obj = { title: title }; 
 
     var children = convertTree(tree[title]); 
 
     if (children.length) obj.children = children; 
 
     return obj; 
 
    }); 
 
} 
 

 
// Sample data 
 
var arr = [ 
 
    'Dept;Accounting', 
 
    'Dept;ATG;Business', 
 
    'Dept;Cloud Services', 
 
    'Dept;Consulting', 
 
    'Dept;Education', 
 
    'Dept;Finance', 
 
    'Dept;Hardware', 
 
    'Dept;HR', 
 
    'Dept;Industries', 
 
    'Dept;ATG', 
 
    'Dept;ADIU', 
 
    'Dept;Legal', 
 
    'Dept;Marketing', 
 
    'Dept;Office', 
 
    'Dept;Products', 
 
    'Dept;Project Managing', 
 
    'Dept;Products Marketing' 
 
]; 
 

 
// Convert to key-based nested structure 
 
var tree = buildTree(arr); 
 
//console.log(tree); 
 

 
// Convert to children-array-based nested structure 
 
var tree2 = convertTree(tree) ; 
 
console.log(tree2);