dc.js:如何在对象元素列表上减少计数

dc.js: how to reduceCount on an object element list?

本文关键字:列表 元素 对象 js dc      更新时间:2023-09-26

我有一个对象,如下所示:

[    { "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 个项目中出现。实际上,我想在我的词云中使用这些数据。

我可以在交叉过滤器之外执行此操作,但不确定如何通过交叉过滤器维度来实现这一点。

任何帮助都是可观的。


伊桑·杰维特提到的解决方案

有没有办法告诉交叉过滤器将数组的元素视为单独的记录,而不是将整个数组视为单个键?

如果要在当前版本的交叉过滤器中执行此操作,则需要使用 groupAll。这个问题的答案提供了一个示例:有没有办法告诉交叉过滤器将数组的元素视为单独的记录,而不是将整个数组视为单个键?

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

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