Konvertieren in ein hierarchisches Array in JavascriptJquery

JQuery-Programmierung
Anonymous
 Konvertieren in ein hierarchisches Array in Javascript

Post by Anonymous »

Fiddle-Beispiel

Ich möchte diese JSON-Daten konvertieren

Code: Select all

var data = [
{
"computer": 24,
"brand": "Italy A",
"phone": 0,
"country": "Italy"
},
{
"brand": "Italy C",
"computer": 0,
"phone": 0,
"country": "Italy"
},
{
"brand": "Brazil B",
"computer": 0,
"phone": 22,
"country": "Brazil"
},
{
"computer": 0,
"brand": "Brazil D",
"phone": 62,
"country": "Brazil"
},
{
"computer": 34,
"brand": "US E",
"phone": 41,
"country": "US"
}
];
in eine hierarchische Form für ein d3-Diagramm:

Code: Select all

{
"name": "categories",
"children": [
{
"name": "phone",
"children": [
{
"name": "US",
"children": [
{
"brand": "US E",
"size": 41
}
]
},
{
"name": "Brazil",
"children": [
{
"brand": "Brazil B",
"size": 22
},
{
"brand": "Brazil D",
"size": 62
}
]
},
{
"name": "Italy",
"children": []
}
]
},
{
"name": "computer",
"children": [
{
"name": "US",
"children": [
{
"brand": "US E",
"size": 34
}
]
},
{
"name": "Brazil",
"children": []
},
{
"name": "Italy",
"children": [
{
"brand": "Italy A",
"size": 24
}
]
}
]
}
]
}
Ich habe mir diesen Code ausgedacht, um das Format zu generieren:

Code: Select all

function group_children(data){
var categories = ["phone","computer"];
var countries = ["US","Brazil","Italy"];
var object = {name:"categories",children:[]};
for(var c =0; c < categories.length;c++){
object.children.push({"name":categories[c],children:[]});

for(var con = 0;con < countries.length;con++){
object.children[c].children.push({"name":countries[con],"children":[]});
}
}

for(var i = 0;i < data.length;i++){
var row = data[i];
for(var c =0; c < categories.length;c++){
for(var con = 0;con < countries.length;con++){
var cat_key = categories[c],
country_key = countries[con];
if(row[cat_key] > 0){
if(object.children[c].name == cat_key && row.country == country_key){  object.children[c].children[con].children.push({brand:row["brand"],size:row[cat_key]});
}
}
}
}
}
return object;
}
Ist es während der Iteration möglich, ein Land nicht in das untergeordnete-Array der Marke oder des Computers zu verschieben, wenn das untergeordnete-Array des Landes leer ist?

Zum Beispiel sollten diese Objekte entfernt werden

Code: Select all

        // computer
{
"name": "Brazil",
"children": []
}
// phone:

{
"name": "Italy",
"children": []
}
Hier ist der Teil, der jedes Land in das untergeordnete Array jeder Kategorie verschiebt:

Code: Select all

    for(var c =0; c < categories.length;c++){
object.children.push({"name":categories[c],children:[]});

for(var con = 0;con < countries.length;con++){
object.children[c].children.push({"name":countries[con],"children":[]});
}
}
Mein Ansatz ist wahrscheinlich falsch, daher sind auch alle anderen Vorschläge zur Konvertierung der Daten in diese hierarchische Form willkommen.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post