感觉应该很容易:/

crossfilter API说我可以对groupAll运行reduce:
https://github.com/square/crossfilter/wiki/API-Reference#groupAll_reduce

但是我无法使其正常工作。我试过facts.groupAll(),其中var facts = crossfilter(data);我已经尝试过all.reduce(),其中var all = facts.groupAll()。我尝试了带括号和不带括号的情况,并用谷歌搜索了示例。有人知道一个可行的例子吗?我希望所有行都有一个输出。

我意识到我的reduce函数还不完整,看起来很复杂。它可以很好地缩小维度,但事实上对groupAll未定义。

谢谢

  var accumGrp = facts.groupAll().reduce(
    function(p,v) {
      for (var i=0; i<supplierFields[0].length; i++) {
        if (!p.population[supplierFields[0][i]]) { p.population[supplierFields[0][i]] = []; }
        p.population[supplierFields[0][i]].push(v[supplierFields[0][i]+'_l']);
      }
      return p;
    },
    function(p,v) { return p; },
    function() {
      var obj = {};
      obj.population = {};
      obj.highlight = {};
      return obj;
    }
  );

  print_filter('accumGrp');

最佳答案

这里的基本问题可能是您需要调用groupAll.value()来执行组聚合,而常规组在定义或加载数据时计算聚合,而不是在使用group.topgroup.all查询它们时进行计算。

看来您的基本方法是正确的,并且我看不到print_filter的作用,所以这只是一个猜测,但是请尝试在脚本结尾处调用console.log(accumGrp.value())并查看它是否有效。

如果没有,请参考以下简短示例:

var data = [1,2,3,4]

var cf = crossfilter(data)
var grp = cf.groupAll().reduce(
  function(p, d) { return p + d },
  function(p, d) { return p - d },
  function() { return 0 }
)

console.log(grp.value())


打印10。这是一个可运行的JSFiddle,您可以在其中进行尝试(使用更多控制台语句可能有助于查看发生的情况):https://jsfiddle.net/esjewett/39xgn5ah/1/

10-04 15:46