【问题标题】:How to Remove duplicate Arrays (by id) while Grouping?如何在分组时删除重复的数组(按 id)?
【发布时间】:2015-08-21 11:01:46
【问题描述】:

样本数据:

 [ {_id:5,job:"a",exp:1,
    tech : [ 
         "ERP Systems SAP R/3 ECC6.0", 
         "Operating Systems", 
         "Microsoft Dos"
          ]
     }]

我有 3 个人数据(6 行(展平后))。基于“_id”,我在饼图 grpah 中采用唯一值(每个切片计数为 1)。但未能在行图中执行相同操作(带注释行)。我如何仅获取唯一 ID 的“技术”并将其提供给“第一行图表”(目前在第一行图表中,每种技术的计数为 2。我想根据 _id 删除重复项)。

如何对技术进行分组(1 个 id 忽略仅一次)?

jsfiddle here

任何建议。提前致谢

【问题讨论】:

  • 基本上,您需要跟踪您已经看过的id,以及您已经看过的每个id的数量。然后当你得到一个新的 id 时增加这些 id 的计数,当你删除一个时递减,当计数变为零时从以前看到的 id 列表中删除 id。仅当您看到以前从未见过的 id 时才增加实际计数器。这很复杂,这也是我编写 Reductio 的原因之一,它使用异常聚合来处理这个问题:github.com/esjewett/reductio#exception-aggregation
  • 感谢@EthanJewett 的回复,您能提供任何示例吗?
  • 谢谢@EthanJewett(我没有使用reductio。但按照你说的做了)
  • 酷,很高兴它起作用了,很抱歉我没有举个例子。当时没有时间,这就是为什么我留下评论而不是答案:-(
  • 嗨@EthanJewett你能提供一些使用reductio的例子吗?因为我面临性能问题(使用另一种方法)。

标签: javascript d3.js dc.js crossfilter


【解决方案1】:

根据 cmets 中的对话,要使用 Reductio 完成 groupAll 技术聚合,您需要:

var techGroup = tech.groupAll()
var reducer = reductio()
  .groupAll(function(d) { return d.tech; })
  .exception(function(d) { return d._id; })
  .exceptionCount(true);

reducer(techGroup);

这是一个目前没有经过很好测试的用例(使用带有异常聚合的 groupAll)。它应该可以工作,并且有一些基本的测试,但我担心我在这里让你有点像豚鼠。请告诉我进展如何。

【讨论】:

  • 嗨@Ethan Jewett 很抱歉回复晚了。我实施了你的建议。它正在工作,但比常规方法需要更多时间。
  • 嗨,sandeep - 我很乐意看一个例子,看看我是否可以在 Reductio 中进行任何优化。一般来说,groupAll 可能只是比创建多个记录和使用标准组的方法效率低。但它在做一些本质上不同的事情,所以这是意料之中的。
  • 感谢@Ethan Jewett 的回复。我会尽快分享示例
猜你喜欢
  • 1970-01-01
  • 2021-05-30
  • 2021-06-29
  • 2017-09-28
  • 1970-01-01
  • 2010-12-25
相关资源
最近更新 更多