convertCsv = (json) => {
const result = { name: "World", children: [] };
const layers = {};
json.forEach((row) => {
const layer = row.Layer;
let current = layers[layer];
if (!current) {
layers[layer] = {
name: layer,
sum: 0,
count: 0,
children: [],
};
}
});
Object.values(layers).forEach((layer) => {
const categories = {};
json.forEach((row) => {
if (row.Layer !== layer.name) {
return;
}
if (!categories[row.Category]) {
categories[row.Category] = {
name: row.Category,
sum: 0,
count: 0,
children: [],
};
}
categories[row.Category].children.push({
name: row.Name,
value: row.R,
});
categories[row.Category].sum += +row.R;
categories[row.Category].count++;
});
Object.values(categories).forEach((category) => {
layer.children.push(category);
layer.sum += category.sum;
layer.count += category.count;
});
});
Object.values(layers).forEach((layer) => {
result.children.push(layer);
});
return result;
}