6

我刚刚开始使用 crossfilter 和 d3.js ...我正在尝试 API 参考中给出的一些片段...我有以下数据

var payments = crossfilter([
  {date: "2011-11-14T16:17:54Z", quantity: 2, total: 190, tip: 100, type: "tab"},
  {date: "2011-11-14T16:20:19Z", quantity: 2, total: 190, tip: 100, type: "tab"},
  {date: "2011-11-14T16:28:54Z", quantity: 1, total: 300, tip: 200, type: "visa"},
  {date: "2011-11-14T16:30:43Z", quantity: 2, total: 90, tip: 0, type: "tab"},
  {date: "2011-11-14T16:48:46Z", quantity: 2, total: 90, tip: 0, type: "tab"},
  {date: "2011-11-14T16:53:41Z", quantity: 2, total: 90, tip: 0, type: "tab"},
  {date: "2011-11-14T16:54:06Z", quantity: 1, total: 100, tip: 0, type: "cash"},
  {date: "2011-11-14T16:58:03Z", quantity: 2, total: 90, tip: 0, type: "tab"},
  {date: "2011-11-14T17:07:21Z", quantity: 2, total: 90, tip: 0, type: "tab"},
  {date: "2011-11-14T17:22:59Z", quantity: 2, total: 90, tip: 0, type: "tab"},
  {date: "2011-11-14T17:25:45Z", quantity: 2, total: 200, tip: 0, type: "cash"},
  {date: "2011-11-14T17:29:52Z", quantity: 1, total: 200, tip: 100, type: "visa"}
]);

我可以通过类型创建维度

var paymentsByTotal = payments.dimension(function(d) { return d.type; });

我的问题是如何过滤字符串数组。我试过:

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

但是我没有得到预期的结果!

有什么建议么?

4

3 回答 3

3

Crossfilter.js 的 master 分支中的源代码,没有过滤器联合的规定,您必须从Jason Davies 的联合分支获取代码。

然后,您应该能够做到paymentsByTotal.filter("cash","visa");并获得所需的输出。

于 2012-11-01T09:46:12.950 回答
2

似乎 afilterFunction(function)自上次响应以来已添加,因此您现在可以使用以下方法执行此操作:

paymentsByTotal.filterFunction(function(d) { return d === "visa" || d === "cash" });
于 2013-08-21T19:16:03.733 回答
1

如果您有一个值数组,并且您不想d === "visa"为每个项目指定显式逻辑(即),那么您可以扩展 sai 的filterFunction解决方案以检查该值是否包含在您的数组中。如果要过滤的项目数组很大或可能发生变化,这样做只会让事情变得更容易。

var items = ['Visa', 'Cash'];
paymentsByTotal.filterFunction(function(d) { return items.indexOf(d) > -1;});
于 2013-12-17T11:06:35.167 回答