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

问题描述 投票:0回答:2

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

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

javascript d3.js
2个回答
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
投票

您可以使用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会将数据转换为字符串,因此可能需要将它们转换回数字。

© www.soinside.com 2019 - 2024. All rights reserved.