我想了解如何在Crossfilter中使用reduce函数。即,
reduceAdd(p,v){...}
reduceRemove(p,v){...}
和
reduceInitial(p,v){...}
在
group.reduce(reduceAdd, reduceRemove, reduceInitial);
从Crossfilter's API reference,我理解p
和v
参数分别代表组和维度值。
根据我的理解,reduce函数的返回值确定在从组中添加或删除元素后应该将groupValue更改为什么。它是否正确?
另外,reduceInitial函数是什么?
这是正确的,如果你在你所写的内容中将“bin value”替换为“groupValue”。
一组由一系列箱子组成;每个bin都是一个键值对。对于每个组,提供给crossfilter的所有数据行都将“落入”一个bin或另一个bin。 reduce函数确定当行落入bin时会发生什么,或者因为过滤器发生变化而从行中删除。
Crossfilter使用dimension value accessor和group value function确定任何行落入哪个bin。
当crossfilter初始化新组时,它会将所有当前匹配的数据行添加到所有组。该组使用维值访问器和组值函数确定每行的键。然后,它使用该键查找bin,并将reduceAdd
函数应用于先前的bin值和行数据以生成新的bin值。
当crossfilter的任何维度上的任何过滤器更改值时,某些行将停止匹配,并且某些行将开始匹配新的过滤器集。使用reduceRemove
函数从匹配的bin中删除停止匹配的行,并使用reduceAdd
函数添加开始匹配的行。
添加行时,某些组可能还没有与该行的键匹配的bin。此时必须初始化一个新的bin,此时该组调用reduceInitial
以获取该组的bin的用户指定的空值。
reduceAdd
和reduceRemove
函数类似于您传递给Javascript的Array.reduce function的函数。第一个参数p
取bin的前一个值,第二个参数v
取当前正在考虑的行数据。
与Array.reduce
相比,在group.reduce
reduceInitial
函数生成,而不是传递给reduce