Crossfilter减少功能

时间:2017-12-15 14:44:31

标签: javascript crossfilter

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

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

reduceInitial(p,v){...}

in

group.reduce(reduceAdd, reduceRemove, reduceInitial);

Crossfilter's API reference开始,我了解pv参数分别代表组和维度值。

据我所知,reduce函数的返回值决定了在组中添加或删除元素后应该更改groupValue的内容。这是对的吗?

另外,什么是?

的reduceInitial函数

1 个答案:

答案 0 :(得分:1)

这是正确的,如果你在你所写的内容中将“bin value”替换为“groupValue”。

一组由一系列箱子组成;每个bin都是一个键值对。对于每个组,提供给crossfilter的所有数据行都将“落入”一个bin或另一个bin。 reduce函数确定当行落入bin时会发生什么,或者因为滤镜更改而从中删除。

Crossfilter使用dimension value accessorgroup value function确定任何行落入哪个bin。

何时调用简化函数?

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

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

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

Crossfilter的group.reduce与Array.reduce相比

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

Array.reduce相比,group.reduce

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