javascript - DC.js,crossfilter - 在 groupAll() 上运行 reduce()

标签 javascript dc.js crossfilter

这感觉应该很容易:/

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

但我无法让它工作。我尝试过facts.groupAll(),其中varfacts = crossfilter(data);我尝试过 all.reduce() ,其中 var all =facts.groupAll() 。我尝试过带括号和不带括号,并用谷歌搜索示例。有谁知道一个有效的例子?我希望所有行都有一个输出。

我意识到我的归约函数并不完整并且看起来很复杂。它可以很好地减少维度,但在事实上给出了 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/

关于javascript - DC.js,crossfilter - 在 groupAll() 上运行 reduce(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43609380/

相关文章:

javascript - 根据浏览器缩放更改 css

javascript - d3.js:5942 错误:<g> 属性转换的无效值 ="translate(NaN,0)"

javascript - 具有不同形状的交叉过滤数据

javascript - Dc.Js 行图删除空箱

javascript - 如何从不同的数组中获取按属性排序的对象?

javascript - Angular 范围和 Kendo UI 控件

javascript - dc.js 和 crossfilter - 根本不读取 json

css - 使用 dc.js (d3.js) 并尝试在 0 处突出显示 x 轴

javascript - 具有单个键的多个值的 dc.js 散点图

javascript - 第一次播放后,循环中的howler js音量 slider 不起作用