我想了解如何在Crossfilter中使用reduce函数。即,
reduceAdd(p,v){...}
reduceRemove(p,v){...}
和
reduceInitial(p,v){...}
in
group.reduce(reduceAdd, reduceRemove, reduceInitial);
从Crossfilter's API reference开始,我了解p
和v
参数分别代表组和维度值。
据我所知,reduce函数的返回值决定了在组中添加或删除元素后应该更改groupValue的内容。这是对的吗?
另外,什么是?
的reduceInitial函数答案 0 :(得分:1)
这是正确的,如果你在你所写的内容中将“bin value”替换为“groupValue”。
一组由一系列箱子组成;每个bin都是一个键值对。对于每个组,提供给crossfilter的所有数据行都将“落入”一个bin或另一个bin。 reduce函数确定当行落入bin时会发生什么,或者因为滤镜更改而从中删除。
Crossfilter使用dimension value accessor和group value function确定任何行落入哪个bin。
当交叉过滤器初始化新组时,将所有当前匹配的数据行添加到所有组。该组使用维值访问器和组值函数为每行确定键。然后它使用该键查找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