Javascript 如何从数据中选择d3.js中的唯一值

Javascript 如何从数据中选择d3.js中的唯一值,javascript,html,d3.js,Javascript,Html,D3.js,我使用下面的代码使用d3.js填充我的组合框 d3.csv("Results_New.txt", function(data) { dataset=data; d3.select("#road").selectAll("option") .data(data).enter().append("option").text(function(d){return d.roadname;}).attr("value",function(d){return d.roadname;}); }); 存在同名

我使用下面的代码使用d3.js填充我的组合框

d3.csv("Results_New.txt", function(data) {
dataset=data;
d3.select("#road").selectAll("option")
.data(data).enter().append("option").text(function(d){return d.roadname;}).attr("value",function(d){return d.roadname;});
});

存在同名的不同行。组合框正在填充这些重复的名称。例如,在多行中,道路的名称为I-80。但在组合框中,我只想看到I-80一次。我该怎么做?

仅通过
d3.map

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

d3.map
已被弃用-d3开发者现在建议只使用JavaScript内置的
Array.map
。(事实上,整个
d3集合
模块现在已经完成,其原理与
d3.set
类似)

在ES6中,使用
Array.map
Set
,以及扩展运算符
,有一种简洁且(我认为)优雅的方法可以做到这一点:

let options = [...new Set(data.map(d => d.roadname))]; 
// optionally add .sort() to the end of that line to sort the unique values
// alphabetically rather than by insertion order

d3.select('#road')
  .selectAll('option')
    .data(options)
  .enter()
    .append('option')
    .text(d => d)
    .attr('value', d => d);

在将数据传递给D3之前,过滤数据中的重复项。我如何才能做到这一点。我正在读取CSV文件并使用从CSV文件3读取的数据。map(数据,函数(d){return d.roadname;})不起作用。现在在comboboxDo中看不到任何值在使用d3.map(数据,函数(d){return d.roadname;})之前我需要做进一步的预处理吗?我如上所述编辑了我的代码。使用
d3.map
映射数据后,将返回由
roadname
索引的对象数组。提取
键()
将为您提供一个清晰的路名列表。您的代码有问题吗?某些道路未显示在combox中。例如,它显示I-74,但不显示I-74