【问题标题】:Filter for multiple discrete values in crossfilter在交叉过滤器中过滤多个离散值
【发布时间】:2012-06-19 02:38:08
【问题描述】:

有没有人可以根据多个值过滤crossfilter 对象维度?类似的东西

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

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

...但不是它的范围形式...

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

...但没有清除部分。

或不使用的等效解决方法/方法

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

??

还是我在 API 中遗漏了什么?

谢谢!

拉里

【问题讨论】:

    标签: javascript d3.js crossfilter


    【解决方案1】:

    我遇到了类似的问题。我解决这个问题的方法是我写了一个过滤函数来检查维度是否在一个特定的数组中。

    // 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;
    });
    

    这将检查该值是否位于该数组中并进行相应的过滤。

    希望这会有所帮助。

    【讨论】:

    • 很好的解决方案。-@pr
    • 很好的解决方案!
    【解决方案2】:

    以下拉取请求看起来可以满足您的需求,但尚未合并。

    Multiple arguments to filter result in union of filter operations

    合并后,您将能够执行以下操作。

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

    这将导致所有过滤条件的联合。

    【讨论】:

    • 是的,早些时候从 D3 队长本人 (mbostock) 那里得到了同样的指示。希望该功能将很快登陆。谢谢!
    【解决方案3】:

    API 中似乎没有任何内容,但如果您想避免使用 filterRange,您可以使用两个基本过滤器并连接结果:

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

    【讨论】:

    • 谢谢,这将获得合并的元素,但不幸的是不会提供必要的多重过滤维度,在我的例子中,它被多个视图引用。仍然可能需要采取解决方法。干杯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 2012-01-22
    • 1970-01-01
    相关资源
    最近更新 更多