toD3HierarchyFormat = (
data,
aggregations=Object.keys(data[0]).slice(0, -1),
aggValueName=Object.keys(data[0]).slice(-1),
aggFunc=d3.sum,
name="root"
) => {
const aggregatedData = d3.rollups(
data,
values => aggFunc(values, d => d[aggValueName]),
...aggregations.map(k => (d => d[k]))
);
return transformData(name, aggregatedData)
function transformData(name, children) {
return Array.isArray(children)
? { name, children: children.map(([name, children]) => transformData(name, children)) }
: { name, value: children };
}
}