javascript - 在 Crossfilterjs 中使用组的意外行为

标签 javascript mapreduce crossfilter

我在与对象对应的键上有一个 Crossfilterjs 维度。

我对对象的一个​​属性进行分组,并使用 reduceCount() 来查找该属性的值计数,但结果不是我所期望的。

我的代码:

<!DOCTYPE html>
<meta charset="utf-8">
<script src="//cdnjs.cloudflare.com/ajax/libs/crossfilter/1.3.9/crossfilter.min.js"></script>
<script>
var arr = [];

for (var i = 0; i < 100; i++) {
    for (var j = 0; j < 100; j++) {
        for (var k = 0; k < 100; k++) arr.push({a: i, e: { b: j, c: k}});
    }
}

var cf = crossfilter(arr),
    a  = cf.dimension(function(d) { return d.a; }),
    e  = cf.dimension(function(d) { return d.e; });

var counts = e.group(function(d) { return d.b; })
              .reduceCount()
              .orderNatural()
              .top(Infinity);

console.log(counts);

</script>

当我检查控制台时,我得到一个包含 67 个键/值对象的数组。

我期望得到一个包含 100 个键/值对象的数组,每个值对应 b 的一个值。

此外,有些计数并不符合我的预期。我期望所有的值都是相同的。然而,对于大多数键,我得到的值是 100,而对于少数键,我得到的值非常不同。 key 99 的值为 990100。

我在 Google Chrome 36.0.1985.143 m 中得到了这些结果。

我之前没有在 Crossfilterjs 中使用过自定义分组功能,看来我对这个功能不太了解。

我在 Crossfilterjs API 上查找了分组,但它并没有帮助我弄清楚事情。

提前致谢

最佳答案

我犯了错

当我阅读文档时,我没有注意到这一点:

groupValue must return a naturally-ordered value; furthermore, this order must be consistent with the dimension's value function

我的分组值是一个字符串,它具有自然排序,但我的维度是在不具有自然排序的对象上创建的。顺序之间的不一致一定是导致问题的原因。

然后我注意到文档中的另一部分解决了我的维度排序问题:

crossfilter.dimension() constructs a new dimension using the specified value accessor function. The function must return naturally-ordered values, i.e., values that behave correctly with respect to JavaScript's <, <=, >= and > operators. This typically means primitives: booleans, numbers or strings; however, you can override object.valueOf to provide a comparable value from a given object, such as a Date.

关于javascript - 在 Crossfilterjs 中使用组的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25567165/

相关文章:

java - 使用(Java编程)查找hadoop中的最大整数值

r - 当我尝试在 dplyr group_map 函数中使用 defuse-inject 模式时失败

hadoop - Pig - 错误 1045 : AVG as multiple or none of them fit. 请使用显式转换

dc.js - 需要定制reducer来扣除两个值

Javascript 生成更改位置

javascript - 如何在单击按钮时显示 cytoscape.js 中的所有 qtips

javascript - 如何在 Crossfilter 中通过另一个变量过滤维度

javascript - 使用 dc.js 的日期堆积面积图

javascript - 我如何在同一目录中需要来自 index.js 的内容?

Javascript表导出到excel utf8