Crossfilter减少功能

问题描述 投票:1回答:1

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

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

reduceInitial(p,v){...}

group.reduce(reduceAdd, reduceRemove, reduceInitial);

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

根据我的理解,reduce函数的返回值确定在从组中添加或删除元素后应该将groupValue更改为什么。它是否正确?

另外,reduceInitial函数是什么?

javascript crossfilter
1个回答
1
投票

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

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

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

When are reduction functions called?

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

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

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

Crossfilter's group.reduce compared to Array.reduce

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

Array.reduce相比,在group.reduce

  • 值既可以删除也可以添加
  • 初始值由reduceInitial函数生成,而不是传递给reduce
  • 它不会立即执行聚合;相反,您提供的函数将在过滤器更改或添加或删除数据时调用
© www.soinside.com 2019 - 2024. All rights reserved.