只想使用d3.js无法显示唯一值

时间:2015-04-09 21:51:31

标签: javascript d3.js

我有大型数据集,同一个探测器有多次出现。还有很多探测器。我想用独特的探测器填充组合框。 我使用以下代码:

d3.select("#detectors")
    .selectAll("option")
    .data(d3.map(data, function(d) {
            return d.code;
        })
        .keys())
    .enter()
    .append("option")
    .text(function(d) {
        return d;
    }).attr("value", function(d) {
        return d;
    });

但它没有显示独特的探测器代码。相反,组合框中的数字从1到正在填充。 我怎样才能实现我想要的目标。我的示例简单数据集是

var data=[{"code":5222,"date":3-4-2015},{"code":5222,"date":3-6-2015},{"code":5222,"date":3-7-2015},];

数据实际上有大量具有唯一代码的探测器。我想在组合框中显示这些独特的代码。对于上述情况,选项中只有一个5222

2 个答案:

答案 0 :(得分:3)

我认为您需要使用nest()

var nest = d3.nest()
  .key(function(d) { return d.code; })
  .entries(data);

这将创建一个新数组,每个代码只有一次,并且是具有该值的所有对象的对象。

修改

var data=[{"code":5222,"date":3-4-2015},{"code":5222,"date":3-6-2015},{"code":5222,"date":3-7-2015}];

var nest = d3.nest()
  .key(function(d) { return d.code;})
  .entries(data);

d3.select("#detectors").selectAll("option")
  .data(nest)
  .enter()
    .append("option")
    .text(function(d){ return d.key;})
    .attr("value",function(d){return d.key;});

此代码适用于我,没有错误

答案 1 :(得分:1)

您可以使用 d3.set()方法解决此问题:https://github.com/d3/d3-collection/blob/master/README.md#sets

代码将是:

var data=[{"code":5222,"date":3-4-2015},{"code":5222,"date":3-6-2015},{"code":5222,"date":3-7-2015},];

var Unique = d3.set(data, function(d) {return d.code});

仅按照您的预期返回' 5222'

请注意,在这种情况下,d3会将数据转换为字符串,因此可能需要将它们转换回数字。