javascript - 如何过滤 dc/crossfilter 维度中的多个值?

标签 javascript dc.js crossfilter

假设我有这个数据和维度:

var data = [
      {"fruit": "apple", "amount": "12"},
      {"fruit": "orange", "amount": "6"},
      {"fruit": "grape", "amount": "11"},
      {"fruit": "melon", "amount": "26"},
      {"fruit": "lemon", "amount": "15"}
    ]

var ndx = crossfilter(data);
var fruitDimension = ndx.dimension(function (d) {
                            return d.fruit;
                        });

...现在,我只想使用代码过滤“apple”、“lemon”和“orange”。到目前为止,我正在尝试做类似的事情。

fruitDimension.filter(["apple","lemon","orange"])

...但它并不能解决所有问题。

  • 我知道函数#dimension.filterExact(value) 对一个值有效。

    • 如果我应用 # dimension.filter(value) 将向量作为参数传递,它会将其处理为 # dimension.filterRange(range)

    • 我找不到哪个过滤器适用于不同的值。

引用资料来自:https://github.com/square/crossfilter/wiki/API-Reference

有人暗示我可以做什么来过滤维度的不同元素(不遵循范围顺序)?

提前致谢, 罗杰

最佳答案

为此,Crossfilter 需要自定义过滤器功能。 dc.js 提供了一个。

应用于 dc.js 图表

如果您使用的是 dc 图表,您应该通过图表的 filter 函数应用过滤器,该函数与 crossfilter 维度过滤器具有不同的语法和语义:

chart.filter([["apple","lemon","orange"]]);

注意额外的一组括号。很奇怪吧?我不知道它是如何进化成这样的。此外,dc 将切换每个值,因此如果您想替换过滤器,请使用 replaceFilter 而不是 filter

这记录在 filterHandler function 中,这是 dc.js 将过滤器应用到 crossfilter 的地方。

图表不知道直接对交叉过滤器维度的更改:如果您使用图表的 .filter(),则图表将更新视觉选择。

直接用crossfilter

如果您想将多值过滤器直接应用于交叉过滤器维度,这里有一个函数可以为值数组生成过滤器函数:

function multivalue_filter(values) {
    return function(v) {
        return values.indexOf(v) !== -1;
    };
}
fruitDimension.filterFunction(multivalue_filter(["apple","lemon","orange"]));

关于javascript - 如何过滤 dc/crossfilter 维度中的多个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38920359/

相关文章:

javascript - 如果内容是几个空格,为什么 TinyMCE getContent() 返回空字符串/

javascript - 如何将多值数据传递给 dc.js 中的等值线

javascript - 在条形图中的条形顶部显示值

javascript - DC.js X 轴小时标签显示为千分之一

javascript - 使用 dc.js 创建一个简单的饼图

javascript - dc.js:具有嵌套分组的箱线图

javascript - 在异步 Mocha 测试中配置 JSDom

javascript - 是否可以迭代下划线模板中的顶级数组?

javascript - 从 CSS 切换按钮触发 Jquery 事件

javascript - DC.js 条形图条形大小调整