При использовании Crossfilter (https://github.com/square/crossfilter) я указываю функции, которые следует использовать при добавлении и удалении данных из группы. Это довольно тривиально, чтобы отслеживать среднее значение (используя CoffeeScript):
reduceAdd = (p, v) ->
++p.count;
p.sum += v.digit;
p
reduceRemove = (p, v) ->
--p.count;
p.sum -= v.digit;
p
reduceInitial = ->
{
count: 0
sum: 0
average: ->
return 0 if this.count == 0
return this.sum / this.count
}
Можно ли отслеживать максимальные и минимальные значения для каждой группы? Я не могу понять, как сохранить все элементы в огромном массиве и сделать d3.min/d3.max. Похоже, что добавление/удаление данных было бы крайне неэффективным.
Я также искал способ сказать Crossfilter полностью перестроить группу с нуля, а не удалять элементы из существующей группы. Если применяется фильтр, группа reset и перестраивается. Нет ничего очевидного.