Filter for multiple discrete values in crossfilter

2020-06-04 03:19发布

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

3条回答
老娘就宠你
2楼-- · 2020-06-04 03:35

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))
查看更多
叼着烟拽天下
3楼-- · 2020-06-04 03:42

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.

查看更多
趁早两清
4楼-- · 2020-06-04 03:50

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.

查看更多
登录 后发表回答