Javascript 分组时如何删除重复阵列(按id)?

Javascript 分组时如何删除重复阵列(按id)?,javascript,d3.js,dc.js,crossfilter,Javascript,D3.js,Dc.js,Crossfilter,样本数据: [ {_id:5,job:"a",exp:1, tech : [ "ERP Systems SAP R/3 ECC6.0", "Operating Systems", "Microsoft Dos" ] }] 我有3个人的数据(6行(展平后))。基于“_id”,我在pie grpah中获取唯一值(每个切片计数为1)。但在行图表中无法执行相同操作(带有注释行)。如何仅获取唯一id的“t

样本数据:

 [ {_id:5,job:"a",exp:1,
    tech : [ 
         "ERP Systems SAP R/3 ECC6.0", 
         "Operating Systems", 
         "Microsoft Dos"
          ]
     }]
我有3个人的数据(6行(展平后))。基于“_id”,我在pie grpah中获取唯一值(每个切片计数为1)。但在行图表中无法执行相同操作(带有注释行)。如何仅获取唯一id的“tech”并将其交给“第一行图表”(目前在第一行图表中,每种技术都有计数2。我想根据_id删除重复项)

如何对技术进行分组(剩余1个id仅一次)


任何建议。根据评论中的对话提前感谢,要使用ReduceTio完成技术上的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和异常聚合)。它应该可以工作,并且有一些基本的测试,但我恐怕我在这里把你变成了一只小白鼠。请让我知道它是如何工作的。

根据评论中的对话,要使用ReduceTio完成技术上的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和异常聚合)。它应该可以工作,并且有一些基本的测试,但我恐怕我会让你在这里变成一只豚鼠。请让我知道它是如何工作的。

基本上,你需要跟踪你已经看到的id,以及你已经看到的每个id的数量。然后,当你得到一个新的id时,增加这些id的计数,当你删除一个id时,减少这些计数,一个d当计数变为零时,将id从以前看到的id列表中删除。只有在看到以前没有见过的id时才增加实际计数器。这很复杂,这也是我编写ReduceTio的原因之一,它使用异常聚合处理此问题:感谢回复@EthanJewett@EthanJewett您能提供任何示例吗?谢谢@EthanJewett(我没有使用reductio,但按照你说的做了)很酷,很高兴它成功了,很抱歉我没有给出一个例子。当时没有时间,这就是为什么我留下评论而不是回答:-(嗨@EthanJewett,你能提供一些使用reductio的例子吗?因为我面临性能问题(使用另一种方法)。基本上,你需要跟踪你已经看到的id,以及你已经看到的每个id的数量。然后,当你得到一个新的id时,增加该id的计数,当你删除一个id时,减少该计数,当计数变为零时,从以前看到的id列表中删除该id。只有当你看到一个你没有看到的id时,才增加你的实际计数器以前。这很复杂,这也是我写ReduceTio的原因之一,它使用异常聚合来处理这个问题:谢谢@EthanJewett的回复,你能提供一些例子吗?谢谢@EthanJewett(我没有使用ReduceTio,但是按照你说的做了)很酷,很高兴它成功了,很抱歉我没有给出一个例子。当时没有时间,这就是为什么我留下了评论而不是答案:-(Hi@EthanJewett你能提供一些使用ReduceTio的例子吗?因为我面临性能问题(使用另一种方法).Hi@Ethan Jewett很抱歉这么晚才回复。我已经实施了你的建议。虽然有效,但比常规方法花费的时间更多。Hi sandeep-我很乐意看一个例子,看看我是否可以在ReduceTio中进行任何优化。一般来说,groupAll的效率可能不如创建的方法多个记录并使用标准组。但它做了一些本质上不同的事情,所以这是意料之中的。感谢@Ethan Jewett的回复。我将尽快分享示例Hi@Ethan Jewett很抱歉回复太晚。我实施了你的建议。这是有效的,但比常规方法需要更多的时间。嗨,sandeep-我很乐意看一个例子,看看我是否可以在ReduceTio中进行任何优化。一般来说,groupAll的效率可能比创建多个记录和使用标准组的方法要低。但它做的事情本质上是不同的,所以这是意料之中的。感谢@Ethan Jew的回复我会尽快和大家分享这个例子