Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript DC.js,crossfilter-在groupAll()上运行reduce()_Javascript_Dc.js_Crossfilter - Fatal编程技术网

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

Javascript DC.js,crossfilter-在groupAll()上运行reduce(),javascript,dc.js,crossfilter,Javascript,Dc.js,Crossfilter,这感觉应该很简单:/ crossfilter API说我可以在groupAll上运行reduce: 但是我不能让它工作。我尝试过facts.groupAll(),其中var facts=crossfilter(data);我尝试了all.reduce(),其中var all=facts.groupAll()。我试过使用括号和不使用括号,并用谷歌搜索了一些例子。有人知道一个有效的例子吗?我希望所有行都有一个输出 我意识到我的reduce函数不完整,看起来很复杂。它可以很好地减少维度,但根据事实为

这感觉应该很简单:/

crossfilter API说我可以在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');
var accumGrp=facts.groupAll().reduce(
功能(p,v){

对于(var i=0;i您这里的基本问题可能是您需要调用
groupAll.value()
以执行组聚合,而常规组在定义或数据加载时计算聚合,而不是在使用
group.top
group.all
查询聚合时

看起来您的基本方法在其他方面是正确的,我看不出
print\u 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
。这里是一个可以使用的JSFIDLE,您可以在其中进行尝试(还有一些控制台语句可能有助于了解正在发生的事情):