В моем коде я позволил себе удалить повторяющиеся строки из набора данных с помощью функции d3.nest () с прилагаемым выходным образцом.
Теперь, когда у меня есть уникальные записи в моем массиве JSON, я хотел бы выполнить некоторые вычисления с этим набором данных, в частности, найти среднее «время цикла» для каждой даты. В этом примере результат в идеале будет выглядеть так:
[
{
"key": "2012-03",
"values": [
{
"mean": 16,
}
]
},
{
"key": "2012-06",
"values": [
{
"mean": 10,
}
]
},
{
"key": "2012-07",
"values": [
{
"mean": 8,
}
]
}
]
Я пробовал следовать нескольким примерам в Интернете, но мне кажется, что мне не хватает чего-то очевидного, может кто-нибудь помочь?
var summaryTable = [
{
"key": "2012-03",
"values": [
{
"key": "AAA-1",
"value": {
"cycletime": 14
}
},
{
"key": "AAA-2",
"value": {
"cycletime": 18
}
}
]
},
{
"key": "2012-06",
"values": [
{
"key": "AAA-3",
"value": {
"cycletime": 8
}
},
{
"key": "AAA-4",
"value": {
"cycletime": 12
}
}
]
},
{
"key": "2012-07",
"values": [
{
"key": "AAA-5",
"value": {
"cycletime": 15
}
},
{
"key": "AAA-5",
"value": {
"cycletime": 1
}
},
{
"key": "AAA-6",
"value": {
"cycletime": 8
}
}
]
}
]
var d3Table = d3.nest()
.key(function(d) { return d['key']; })
.rollup(function(d) {
return {
"medianCycleTime": d3.mean(d, d3.values(d['values']['value'])),
};
})
.entries(summaryTable);



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


После тщательного изучения ваших данных d3.nest я нашел функцию, которую можно использовать в rollup.
Аргумент d rollup - это массив со всеми объектами, имеющими этот ключ. Вы должны сначала проиндексировать это, иначе вы получите метод values() класса Array.
var d3Table = d3.nest()
.key(function(d) { return d['key']; })
.rollup(function(d) {
return {
"medianCycleTime": d3.mean(d[0]['values'], d => d.value.cycletime ),
};
})
.entries(summaryTable);