javascript - Crossfilter reduce 函数

标签 javascript crossfilter

我想了解如何在 Crossfilter 中使用 reduce 函数。即,

reduceAdd(p,v){...}
reduceRemove(p,v){...}

reduceInitial(p,v){...}

group.reduce(reduceAdd, reduceRemove, reduceInitial);

来自 Crossfilter's API reference , 我理解 pv 参数分别表示组和维度值。

据我了解,reduce 函数的返回值决定了在将元素添加到组中或从组中删除后,groupValue 应更改为什么。这是正确的吗?

另外,reduceInitial函数是做什么用的?

最佳答案

这是正确的,如果你用“bin value”代替你写的“groupValue”。

一个组由一组 bin 组成;每个 bin 都是一个键值对。对于每一组,提供给交叉过滤器的所有数据行都将“落入”一个容器或另一个容器中。 reduce 函数确定当一行落入容器或由于过滤器更改而从容器中删除时会发生什么。

Crossfilter 通过使用 dimension value accessor 确定任何行落入哪个 bin和 group value function .

什么时候调用缩减函数?

当交叉过滤器初始化一个新组时,它会将所有当前匹配的数据行添加到所有组中。该组使用维度值访问器和组值函数为每一行确定一个。然后它使用该键查找 bin,并将 reduceAdd 函数应用于先前的 bin 值和行数据以生成新的 bin 值。

当交叉过滤器的任何维度上的任何过滤器更改值时,某些行将停止匹配,而某些行将开始匹配新的过滤器集。使用 reduceRemove 函数将停止匹配的行从匹配箱中删除,使用 函数将开始匹配的行添加 reduceAdd 函数。

添加一行时,某些组可能还没有与该行的键匹配的 bin。此时,必须初始化一个新的 bin,此时该组调用 reduceInitial 以获取该组的 bin 的用户指定的空白值。

Crossfilter 的 group.reduce 与 Array.reduce 对比

reduceAddreduceRemove 函数类似于您将传递给 Javascript 的 Array.reduce function 的函数。 .第一个参数 p 取 bin 的前一个值,第二个参数 v 取当前正在考虑的行数据。

相对于Array.reduce,在group.reduce

  • 可以删除和添加值
  • 初始值由 reduceInitial 函数生成,而不是传递给 reduce
  • 它不会立即执行聚合;相反,您提供的函数将在过滤器更改或添加或删除数据时调用

关于javascript - Crossfilter reduce 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47834652/

相关文章:

javascript - 带 rails 的自定义国家/州下拉菜单

javascript - 将 html 从单独的文件加载到模式对话框中

javascript - Nivo slider 在 Chrome 中不起作用

javascript - addEventListener 和 attachEvent 有什么区别?

javascript - dc.js:具有多个 CSV 的 ReduceSum

javascript - 如何在分组时删除重复的数组(按 id)?

d3.js - dc.js 中的双 Y 轴折线图

javascript - 带有 mcustomscrollbar 问题的 W2ui 侧边栏

javascript - 单击其他图表后显示行图 (dc.js)

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