UNPKG

reductio

Version:

Reductio: Crossfilter groupings

42 lines (40 loc) 1.12 kB
import crossfilter from 'crossfilter2'; var value_count = { add: function (a, prior, path) { var i, curr; return function (p, v, nf) { if(prior) prior(p, v, nf); // Not sure if this is more efficient than sorting. i = path(p).bisect(path(p).values, a(v), 0, path(p).values.length); curr = path(p).values[i]; if(curr && curr[0] === a(v)) { // Value already exists in the array - increment it curr[1]++; } else { // Value doesn't exist - add it in form [value, 1] path(p).values.splice(i, 0, [a(v), 1]); } return p; }; }, remove: function (a, prior, path) { var i; return function (p, v, nf) { if(prior) prior(p, v, nf); i = path(p).bisect(path(p).values, a(v), 0, path(p).values.length); // Value already exists or something has gone terribly wrong. path(p).values[i][1]--; return p; }; }, initial: function (prior, path) { return function (p) { p = prior(p); // Array[Array[value, count]] path(p).values = []; path(p).bisect = crossfilter.bisect.by(function(d) { return d[0]; }).left; return p; }; } }; export default value_count;