Javascript 基于交叉滤波器阵列维的滤波器设计

Javascript 基于交叉滤波器阵列维的滤波器设计,javascript,crossfilter,Javascript,Crossfilter,我正在使用,但在尝试创建只选择包含多个数组值的行的筛选器时遇到了问题。使用自定义筛选器函数,可以很容易地创建一个筛选器,用于选择数组值上的并集: var ndx = crossfilter([ {arrayVals: [1, 2]}, {arrayVals: [2, 3]}, {arrayVals: [1, 2, 3]} ]); var arrayDim = ndx.dimension(function(d) {return d.arrayVals;}, true); a

我正在使用,但在尝试创建只选择包含多个数组值的行的筛选器时遇到了问题。使用自定义筛选器函数,可以很容易地创建一个筛选器,用于选择数组值上的并集:

var ndx = crossfilter([
    {arrayVals: [1, 2]},
    {arrayVals: [2, 3]},
    {arrayVals: [1, 2, 3]}
]);
var arrayDim = ndx.dimension(function(d) {return d.arrayVals;}, true);
arrayDim.filter(function(d) {return d == 1 || d == 3;}).top(Infinity);

但是,我确实希望在多个条件的交叉处进行过滤(例如,
d==1&&d==3
)。我知道我可以通过为我想要一起
&&
的每个条件设置一个单独的维度来实现这一点,但这似乎非常浪费。有没有一种方法可以做到这一点而不必求助于多个维度?

不知道为什么这一点被否决了。据我所知,目前的答案基本上是“不”。但是,您不需要为每个条件创建一个新维度,只需要一个非数组类型的维度。比如:

var arrayDim2 = ndx.dimension(function(d) {return d.arrayVals;});
arrayDim2.filter(function(d) { return d.indexOf(1) !== -1 && d.indexOf(3) !== -1;});
arrayDim2.top(Infinity);

然后继续向筛选函数添加新的条件。

不知道为什么会被否决。据我所知,目前的答案基本上是“不”。但是,您不需要为每个条件创建一个新维度,只需要一个非数组类型的维度。比如:

var arrayDim2 = ndx.dimension(function(d) {return d.arrayVals;});
arrayDim2.filter(function(d) { return d.indexOf(1) !== -1 && d.indexOf(3) !== -1;});
arrayDim2.top(Infinity);

然后继续向筛选函数中添加新的条件。

数组维度在dc.js中运行得非常好,这是一件事,将数组作为一个数组离开会使操作更加困难。但如果这就是我要做的,我会想办法让它工作。谢谢@奇点你也许可以同时做到这两个。为dc.js图表使用数组维度和组,为交叉点过滤器使用标准维度。数组维度与dc.js配合得非常好,这是一件事,将数组作为一个数组离开会变得更加困难。但如果这就是我要做的,我会想办法让它工作。谢谢@奇点你也许可以同时做到这两个。对于dc.js图表使用数组维度和组,对于交叉点过滤器使用标准维度。