dc.js:如何在对象元素列表中reduceCount?

时间:2016-03-12 17:10:00

标签: javascript dc.js crossfilter

我有一个像这样的对象:

[    { "Project": 1;  "key":["a", "b", "c", "d"]},
     { "Project": 2;  "key":["b", "c", "d"]},
     { "Project": 3;  "key":["e", "c", "a"]},
     { "Project": 4;  "key":["b", "a", "e", "f"]}        
 ]

就我实现而言,reduceCount只计算单个元素值的出现次数。我想把它改成什么

key     value
a        3
b        3
c        3
d        2
e        2
f        1

我想把它计算在单个项目中出现的时间,如" a"已经出现在3个项目中。实际上这个数据我想在我的wordcloud中使用。

我可以在crossfilters之外进行此操作,但不确定如何通过crossfilters维度实现此目的。

任何帮助都很明显。

Ethan Jewett提到的解决方案

Is there a way to tell crossfilter to treat elements of array as separate records instead of treating whole array as single key?

1 个答案:

答案 0 :(得分:2)

如果要在当前版本的Crossfilter中执行此操作,则需要使用groupAll。这个问题的答案提供了一个例子:Is there a way to tell crossfilter to treat elements of array as separate records instead of treating whole array as single key?

或者,您可以使用Reductio库,它提供了一种非常容易地为复杂组生成reduce函数的方法,并且在这种情况下包装groupAll,使其与dc.js兼容。文档的相关部分位于:https://github.com/crossfilter/reductio#aggregations-groupall-aggregations-reductio-b-groupall-b-i-groupingfunction-i-

如果您特别喜欢冒险,可以尝试在https://github.com/crossfilter/crossfilter使用Crossfilter前叉的主分支。我们最近在dimension调用中添加了一个新参数,该参数将使其严格按照您的描述处理您的数据。文档在这里:https://github.com/crossfilter/crossfilter/wiki/API-Reference#dimension