2017-01-06 12 views
0

Ich muss ein verschachteltes Array in Javascript dynamisch erstellen. Das Array muss diese Struktur haben.Dynamisch erstellte verschachtelte Array in Javascript

{ 
    "name": "main", 
    "children": [ 
    { 
     "name": "main_topic_1", 
     "children": [ 
     { 
      "name": "sub_topic", 
      "size": 422 
     }, 
     { 
      "name": "sub_topic", 
      "size": 422 
     } 
     ] 
    }, 
    { 
     "name": "main_topic_2", 
     "children": [ 
     { 
      "name": "sub_topic", 
      "size": 422 
     }, 
     { 
      "name": "sub_topic", 
      "size": 422 
     } 
     ] 
    }, 
    { 
     "name": "main_topic_3", 
     "children": [ 
     { 
      "name": "sub_topic", 
      "size": 422 
     }, 
     { 
      "name": "sub_topic", 
      "size": 422 
     } 
     ] 
    } 
    ] 
} 

Ich muss in der Lage sein, dynamisch die Anzahl der „main_topic_x“ sowie die Anzahl der sub_topics zu wählen, die zu diesen jeweiligen main_topics gehören.

Ich versuche so etwas, aber ich weiß nicht, wie man die Struktur wie oben bekommen.

main_topics = ['topic 1','topic 2','topic 3']; 
 
    sub_topics = ['subtopic 1','subtopic 2']; 
 

 
    var a = new Array(); 
 
    var b = new Array(); 
 

 
    for(l=0; l<main_topics.length; l++){ 
 
     a[l] = b; 
 
     for(j=0; j<sub_topics.length; j++){ 
 
     b[l] = sub_topics[j]; 
 
     } 
 
    } 
 
    
 
    console.log(JSON.stringify(a, null, 2));

+1

Warum Elemente 'main_topics' und' sub_topics' Leerzeichen in einem String enthalten? Wo sind 'name' und' size' Eigenschaften in Objekten? – guest271314

+0

Sie wieder? lol Mit der Struktur, wie Sie sie haben, müssen Sie über das gesamte Objekt iterieren, um nach dem Schlüssel zu suchen. Wenn die Struktur nicht so sein muss, würde ich empfehlen, sie so zu strukturieren, dass sie den gewünschten Schlüssel verwendet, damit Sie leichter darauf verweisen können. – deweyredman

+0

Leider muss die Struktur so sein, da sie eine D3-Visualisierung speist. Ich muss nur in der Lage sein, die Anzahl der Themen und Unterthemen dynamisch festzulegen. Ich weiß, wie ich sie jetzt benennen soll. – Cybernetic

Antwort

1

Hier ist etwas, was ich für Sie zusammengestellt:

var JSON_Object = {name:"main", children:[]}; 
var main_topics = ["main_topic_1", "main_topic_2", "main_topic_3","main_topic_4"]; 
var sub_topics = [ {parent_topic:0, name:"sub_topic_1", size:422}, 
        {parent_topic:0, name:"sub_topic_2", size:422}, 
        {parent_topic:0, name:"sub_topic_3", size:212}, 
        {parent_topic:1, name:"sub_topic_4", size:322}, 
        {parent_topic:1, name:"sub_topic_5", size:422}, 
        {parent_topic:2, name:"sub_topic_6", size:322}, 
        {parent_topic:2, name:"sub_topic_7", size:125}, 
        {parent_topic:3, name:"sub_topic_8", size:422}]; 
for (let i in main_topics) { 
    let tempObj = {name:main_topics[i], children:[]}; 
    for (let j in sub_topics) { 
    if (sub_topics[j].parent_topic==i) { 
     tempObj.children.push({name:sub_topics[j].name,size:sub_topics[j].size}); 
    } 
    } 
    JSON_Object.children.push(tempObj); 
} 
console.log(JSON.stringify(JSON_Object, null, 2)); 
+1

Ausgezeichnet danke. Ich musste eine kleine Änderung vornehmen, um dynamisch die Anzahl der sub_topics zu ändern, aber es funktioniert großartig. Danke für die Bemühung! – Cybernetic

0

ich die einfachste Weg finden eine dynamische Datenstruktur zu erzeugen ist durch die Herstellung der Ausgangsstruktur und wandeln die Eingabestrukturen inline, wie diese zu starten:

var output = { 
    name: 'main', 
    children: main_topics.map(topic => ({ 
    name: topic, 
    children: sub_topics.map(subTopic => ({ 
     name: subTopic, 
     size: 422 
    }) 
    }) 
}; 

Es ist nicht klar, wo Sie erwarten, dass size von oder warum die Namen in Ihrer Beispielausgabe nicht übereinstimmen, was in main_topics oder sub_topics ist, aber hoffentlich bekommen Sie die Idee.

+0

Danke für die Antwort. Ich sehe nicht, wie die Unterthemen für jedes Thema unterschiedlich sein können. Es sei denn, ich vermisse etwas. – Cybernetic

+0

Ihre Quelldaten sind nur ein Array von Unterthemennamen; Es ist nicht klar, wo Sie diese verschiedenen Unterthemen haben wollen. Wenn Sie eine andere Datenquelle haben, sollten Sie die Frage hinzufügen. – Jacob

Verwandte Themen