следующая ситуация: у меня есть два графика, один график рассеяния и одна гистограмма для значений x в этом графике рассеяния. Я написал пользовательскую функцию сокращения, которая выглядит примерно так:
let grouping = this._cf_dimensions[attribute].group().reduce(
function(elements, item) {
elements.items.push(item);
elements.count++;
return elements;
},
function(elements, item) {
// console.log("item.id = " + item.id);
let match = false;
let values = [];
for (let i = 0; i < elements.items.length && !match; i++) {
// Compare hyperparameter signature.
if (item.id === elements.items[i].id) {
match = true;
elements.items.splice(i, 1);
elements.count--;
}
}
}
return elements;
},
function() {
return {items: [], count: 0};
}
);
Проблема: когда я выбираю точки на графике рассеяния, коррелирующая гистограмма не обновляется должным образом. Я проследил это до функции удаления, т.е. е. вторая из трех функций, приведенных выше, вызывается только для одной из моих пяти групп (я проверил путем сравнения длины elements
с исходным размером группы). Это означает, что item
, которые будут удалены, не обязательно будут найдены.
Другими словами, диаграмма рассеяния выбирает правильный набор точек данных, но функция удаления в показанной выше групповой диаграмме при регистрации входящего обновления фильтра не вызывается для всех групп этой группировки (эквивалентно: не вызывается для всех баров в гистограмма).
Я немного растерялся, так как, похоже, помню, как успешно реализовывал панели мониторинга с dc.js и crossfilter.js и прошлым, точно так же, как это. Не понимаю ли я что-то о концепции обычного уменьшения или есть что-то очевидное, что я упускаю из виду?
Спасибо!