У меня есть объект данных JSON, состоящий из зон, почтовых индексов и количества элементов для каждого почтового индекса.Я пытаюсь суммировать (сворачивать) суммирование количеств и подсчет количества записей по зонам.Я использую d3.js в настоящее время, но открыта для других библиотек, если они лучше подходят.
Пример исходной структуры данных:
var test = [
{
"Name":"One Name",
"Zip":"75001",
"Zone":"A",
"qty":60
},
{
"Name":"Two Name",
"Zip":"75003",
"Zone":"A",
"qty":40
},
{
"Name":"Three Name",
"Zip":"75009",
"Zone":"B",
"qty":20
}
]
И вот желаемый результатЯ пытаюсь достичь:
[
{
"Zone":"A",
"qtySum":100,
"cnt":2,
"values":[
{
"Name":"One Name",
"Zip":"75001",
"Zone":"A",
"qty":60
},
{
"Name":"Two Name",
"Zip":"75003",
"Zone":"A",
"qty":40
}
]
},
{
"Zone":"B",
"qtySum":20,
"cnt":1,
"values":[
{
"Name":"Three Name",
"Zip":"75009",
"Zone":"B",
"qty":20
}
]
}
]
Я могу выполнить группировку без сводных данных, выполнив:
d3.nest()
.key(function(d) { return d.Zone; })
.entries(test)
И я могу свести данные в сводный объект с помощью:
d3.nest()
.key(function(d) { return d.Zone; })
.rollup(function(v) { return {
count: v.length,
total: d3.sum(v, function(d) { return d.qty; }),
};
})
.entries(test);
Но я не могу заставить обоих работать вместе.Я думал о том, чтобы вручную выполнить цикл по объекту итоговой записи и заполнить его соответствующими записями из исходного объекта, но кажется, что это будет слишком много накладных расходов.