javascript - 将选项附加到下拉菜单时删除重复项
问题描述
我已经动态创建了下拉列表并使用 json 数组中的数据填充它们。
数据:
data = [{hello: 'abc', asd: '123', fgh: '345' },
{hello: 'sdf', asd: '456', fgh: 'df' },
{hello: 'ty', asd: '789', fgh: '345675' },
{hello: 'qwe', asd: '123', fgh: '987' }]
键数组(对于我在下拉列表中需要的数据):arr = ['asd', 'fgh']
下拉菜单的创建:
arr.forEach(c => {
$('div').append(`
<div class='float-left'>
<p>${c}</p>
<select id='${c}'></select>
</div>`);
});
要填充下拉列表:
arr.forEach(o => {
data.forEach(strs => {
if (strs[o] != null) {
$(`#${o}`).append(`<option value='${strs[o]}'>${strs[o]}</option>`);
}
});
});
我能够填充下拉列表。如何使用NO DUPLICATES填充下拉列表?
解决方案
您可以创建由指定的对象索引的每个值组成的数组,arr
并在使用它添加选项之前对其进行重复数据删除。注意我已经结合了你的两个forEach
循环;这样做需要id
在顶层添加一个div
. 如果您不想这样做,则需要再次将它们分开。
data = [{hello: 'abc', asd: '123', fgh: '345' },
{hello: 'sdf', asd: '456', fgh: 'df' },
{hello: 'ty', asd: '789', fgh: '345675' },
{hello: 'qwe', asd: '123', fgh: '987' }]
arr = ['asd', 'fgh']
arr.forEach(o => {
$('div#top').append(`
<div class='float-left'>
<p>${o}</p>
<select id='${o}'></select>
</div>`);
let vals = data.map(strs => strs[o]);
vals.filter((v, i) => v !== null && vals.indexOf(v) === i)
.forEach(v => $(`#${o}`).append(`<option value='${v}'>${v}</option>`));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id='top'></div>
推荐阅读
- python - 将matplotlib映射保存到python中的shapefile?
- hive - Hive 中 Parquet 和 Avro 文件格式的模式演变的含义是什么
- amazon-web-services - How to view the ec2 instance limits on aws
- python-3.x - 如何对 csv 文件中的一行或一列的值求和?
- r - 数值积分和优化 R 的问题
- python - 如何以最快的方式对填充有列表的数组(大 N)进行排序?
- java - 正则表达式在Java中的括号内获取字符串?(包括括号内的另一个括号)
- sequence-diagram - 如何增加 ZenUML 序列图中参与者之间的空间?
- jquery - 在循环内更改多个下拉列表值
- laravel - 将 laravel 表单更改为 html 表单