假设我有这个数据和维度:
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/