gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 17:02:34 26 4
gpt4 key购买 nike

我在与对象对应的键上有一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com