【问题标题】:DC.js, crossfilter - running reduce() on groupAll()DC.js,crossfilter - 在 groupAll() 上运行 reduce()
【发布时间】:2017-04-25 11:26:13
【问题描述】:

这感觉应该很容易:/

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

但我无法让它工作。我试过 fact.groupAll() where var fact = crossfilter(data);我已经尝试了 all.reduce() where var all = fact.groupAll()。我试过带和不带括号,并用谷歌搜索了例子。有谁知道一个工作示例?我想要一个跨所有行的输出。

我意识到我的 reduce 函数并不完整,看起来很复杂。它可以很好地减少维度,但会在事实上为 groupAll 提供 undefined。

谢谢

  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');

【问题讨论】:

    标签: javascript dc.js crossfilter


    【解决方案1】:

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

    看起来你的基本方法在其他方面是正确的,我看不出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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-02
      • 1970-01-01
      • 1970-01-01
      • 2014-08-02
      • 2015-12-21
      • 2016-08-31
      相关资源
      最近更新 更多