我有大型数据集,同一个探测器有多次出现。还有很多探测器。我想用独特的探测器填充组合框。我使用以下代码:
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
我想你需要使用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;});
此代码适用于我,没有任何错误
您可以使用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会将数据转换为字符串,因此可能需要将它们转换回数字。