Filter for multiple discrete values in crossfilter

2020-06-04 03:30发布

问题:

Does anyone have an approach to filtering a crossfilter object dimension on multiple values? Something like

.filterExact(["cash","visa"])

or

.filter(["cash","visa"])

...but not the range form of it...

or

.filterAll(["cash","visa"])

...but without the clearing part.

or an equivalent workaround/approach not using

.filterRange(["cash","visa"])

??

Or am I missing something in the API?

Thanks!

Larry

回答1:

I was facing a similar problem. The way I solved it was that I wrote a filter function that would check whether the dimension lies in a particular array or not.

// Array of things you want to filter
var f = ["cash", "visa"];
// Assuming "dim" is our dimension
dim.filter(function(d){
  return f.indexOf(d) > -1;
});

This will check if the value lies in that array and filter accordingly.

Hope this helps.



回答2:

The following pull request looks like it would address your needs, but it has not yet been merged in.

Multiple arguments to filter result in union of filter operations

Once merged you would be able to do something like the following.

data.total.filter("cash", "visa");

Which would result in the union of all filter criteria.



回答3:

There doesn't seem to be anything in the API, but if you want to avoid filterRange, you could to it with two basic filters and concating the results:

var paymentsByType = payments.dimension(function(d) { return d.type; }),
cashAndVisaPayments = Array.prototype.concat(paymentsByType.filter('cash').top(Infinity),paymentsByType.filter('visa').top(Infinity))