从 D3js 下拉列表中删除重复项
Remove Duplicates from D3js Dropdown
我能够纯粹使用 D3.js 创建数据并将其加载到 Select 元素(Dropdown)中。我遇到的主要问题是在下拉列表中我看到了所有名称(重复项)。我只想看到不同的名称。这是一个工作示例:http://jsfiddle.net/khnumtemu/43oaczq8/
var dataset = [
{
"SalesRepName":"KIM MIKE (110)",
"FieldSalesManagerName":"MILLER BRIAN"
},
{
"SalesRepName":"JAISWAL LOKESH (111)",
"FieldSalesManagerName":"MILLER BRIAN"
},
{
"SalesRepName":"QUINTERN GEOFFREY (112)",
"FieldSalesManagerName":"MILLER BRIAN"
},
{
"SalesRepName":"OKOYE MAXIMUS (114)",
"FieldSalesManagerName":"MILLER BRIAN"
},
{
"SalesRepName":"STARGHILL TREVOR (115)",
"FieldSalesManagerName":"OPEN POSITION"
},
{
"SalesRepName":"JARDOT BENJAMIN (318)",
"FieldSalesManagerName":"MILLER BRIAN"
},
{
"SalesRepName":"MICCICHE TERRY (319)",
"FieldSalesManagerName":"MILLER BRIAN",
},
{
"SalesRepName":"KAMENOVA TEODORA (401)",
"FieldSalesManagerName":"OPEN POSITION"
},
{
"SalesRepName":"SHERIDAN BRIAN (402)",
"FieldSalesManagerName":"OPEN POSITION"
},
{
"SalesRepName":"KNEIP CHARLES (403)",
"FieldSalesManagerName":"OPEN POSITION"
}
]
d3.select("body").append("select")
.classed('colorSelect',true)
.selectAll("option")
.data(dataset)
.enter()
.append("option")
.attr("value",function(d){ return d.FieldSalesManagerName;})
.text(function(d){ return d.FieldSalesManagerName;})
.sort(function(a, b) {return d3.ascending(a.FieldSalesManagerName, b.FieldSalesManagerName);});
// Data OnLoad
d3.select("body").selectAll("p")
.data(dataset)
.enter()
.append("p")
// Data Updated on Selected Change
d3.select("select")
.on("change", function(d){
var sel = d3.select(".colorSelect").node().value;
d3.select("body").selectAll("p")
.data(dataset)
.text(function(d){
if(d.FieldSalesManagerName === sel){
return d.SalesRepName;
}
})
});
由于数据重复如此之多,您的代码迫切需要更好的数据结构。 既然你用的是d3
,我先把它强行放到地图上。
var map = d3.map();
dataset.forEach(function(d){
if (!map.has(d.FieldSalesManagerName)){
map.set(d.FieldSalesManagerName, [d.SalesRepName])
} else {
map.get(d.FieldSalesManagerName).push(d.SalesRepName);
}
});
然后,您的下拉菜单将变为:
d3.select("body").append("select")
.classed('colorSelect',true)
.selectAll("option")
.data(map.keys())
.enter()
.append("option")
.attr("value",function(d){ return d;})
.text(function(d){ return d; });
然后,您的on
更改可以避免循环和比较:
d3.select("select")
.on("change", function(d){
var sel = d3.select(".colorSelect").node().value;
d3.select("body").selectAll("p")
.data(map.get(sel))
.text(function(d){
return d;
})
});
更新的小提琴。
相关文章:
- 使用php或javascript从facebook相册URL中删除多余的部分
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 如何删除多行HTML排列中的空白
- 如何从rails中的代码中删除新行( )
- 删除对HTML元素的拖动
- 当图像转换为本地存储的DataURL时,EXIF被删除
- 按顺序添加和删除类
- iframe正在添加标签,需要删除它们
- 如何在HTML输入字段中添加不可删除的后缀
- addData()从最新图表中删除.js 2.1.3-怎么了
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- 删除CKEditor工具栏按钮,但不删除功能
- 当浏览器上的后退按钮到达主页时,我需要删除Class
- 正在删除node.js中已验证的网站
- 正在从页面中删除iframe
- 使用 D3js 并行集动态添加或删除维度
- 在 D3js 强制图中添加和删除节点
- NVD3(D3JS)如何删除y2轴
- 从 D3js 下拉列表中删除重复项
- 删除事件监听器与d3js不工作