我想用一个对象的唯一值填充一个下拉列表( Select 标记).
这是包含数据的对象:
[
{
"code": 1,
"abbr": "BR",
"vote": 49277010
},
{
"code": 1,
"abbr": "BR",
"vote": 31342051
},
{
"code": 43,
"abbr": "RS",
"vote": 3353623
},
{
"code": 31,
"abbr": "MG",
"vote": 3037957
},
{
"code": 31,
"abbr": "MG",
"vote": 5017922
},
{
"code": 35,
"abbr": "SP",
"vote": 2650440
},
{
"code": 42,
"abbr": "SC",
"vote": 2603665
},
{
"code": 1,
"abbr": "BR",
"vote": 71347057
},
{
"code": 26,
"abbr": "PE",
"vote": 2309104
}
]
下面是我如何获取数据来构建下拉列表:
//initialize the dropdown
var dropdown = d3.select("#sel")
dropdown
.selectAll('myOptions')
.data(data)
.enter()
.append('option')
.text(function (d) { return d.abbr; }) //text showed in the options
.attr("value", function (d) { return d.code; }) //values returned by each option
问题是,每个代码/缩写都会显示重复的值,而不是仅显示一个值,如下所示:
<select id="sel">
<option value="1">BR</option>
<option value="1">BR</option>
<option value="43">RS</option>
<option value="31">MG</option>
<option value="31">MG</option>
<option value="35">SP</option>
<option value="42">SC</option>
<option value="1">BR</option>
<option value="26">PE</option>
</select>
如何过滤数据,使其在选项中只有唯一的值?
<select id="sel">
<option value="1">BR</option>
<option value="43">RS</option>
<option value="31">MG</option>
<option value="35">SP</option>
<option value="42">SC</option>
<option value="26">PE</option>
</select>
== EDIT ==
我可以使用set获得unique,如下所示:
const selectedData = [... new Set(data.map(d => d.abbr))].sort();
但是我只能和abbr人一起工作.我怎么也能拿到code分呢?
try 了[... new Set(data.map(d => [d.abbr, d.code))]
次,但没有成功,因为这会再次创建包含所有未过滤数据的数组对象.