Javascript 如何在dc/crossfilter维度中过滤多个值?

Javascript 如何在dc/crossfilter维度中过滤多个值?,javascript,dc.js,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

让我说我有这个数据和维度:

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;
                        });
…现在,我只想用代码过滤“苹果”、“柠檬”和“橙色”。到现在为止,我正在尝试做类似的事情

fruitDimension.filter(["apple","lemon","orange"])
……但这并不是万能的

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

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

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

参考资料来源:

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

提前感谢,,
Roger

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

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

chart.filter([["apple","lemon","orange"]]);
请注意额外的一组括号。奇怪吧?我不知道它是如何演变成这样的。此外,dc将切换每个值,因此如果要更换过滤器,请使用
replaceFilter
而不是
filter

这记录在中,其中dc.js将过滤器应用于交叉过滤器

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

直接使用交叉滤波器 如果您希望将多值过滤器直接应用于交叉过滤器维度,则以下是一个为值数组生成过滤器函数的函数:

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

纯js解决方案行吗?你好,内纳德,谢谢你的快速回复。我想不是我的朋友,因为在这个过滤器之后,我打算制作一个dc.redrawAll(),并根据这个过滤器更新我的图表。但是,如果您的纯js解决方案保证了交叉过滤器维度集,那么可以检查:这是我在搜索如何使用自定义筛选函数时遇到的一篇旧文章。我知道您可以在运行时执行此操作,但是否有办法使DC.js在单击图形的某个轴时使用自定义筛选函数?Hi@Christoph-当然,总有办法。:)dc.js通常不会在轴上查找单击,因此您可以在图表上的“pretransition”或“renderlet”处理程序中选择感兴趣的轴元素(ticks?),然后添加单击事件处理程序。您可能还需要搞乱CSS,因为它是。如果这不能回答你的问题,请提出一个更详细的新问题。听起来和这个问答无关。