使用纯JavaScript删除数组中不包含值的选项
我需要从下拉列表中删除不包含在数组中的选项。这就是我所尝试的:使用纯JavaScript删除数组中不包含值的选项,javascript,arrays,drop-down-menu,Javascript,Arrays,Drop Down Menu,我需要从下拉列表中删除不包含在数组中的选项。这就是我所尝试的: var states_served = ["Connecticut", "Delaware", "Maine", "Maryland", "Massachusetts", "New Hampshire", "New Jersey", "New York", "North Carolina", "Pennsylvania", "Rhode Island", "Vermont", "Virginia", "West Virginia"]
var states_served = ["Connecticut", "Delaware", "Maine", "Maryland", "Massachusetts", "New Hampshire", "New Jersey", "New York", "North Carolina", "Pennsylvania", "Rhode Island", "Vermont", "Virginia", "West Virginia"];
var statesDD = document.querySelector('select[title="State"]');
for (i = 0; i < statesDD.options.length; i++) {
console.log(states_served.includes(statesDD.options[i].value)); //Correctly finds false and true options
if (states_served.includes(statesDD.options[i].value) === false) {
statesDD.remove(i);
}
}
我做错了什么?谢谢。我相信您当前的问题是,当您根据数组元素的初始位置I删除它们时,您没有考虑从数组中删除它们的事实。因此,相对于最终数组,我将不是一个正确的迭代器 避免这种情况的一种方法是避免自己管理索引:
var statesDD = document.querySelector('select[title="State"]')
.filter((state) => !(states_served.includes(state.options[i].value)));
您可以将所服务的状态转换为一个集合,以便在使用筛选器之前,集合上包含的等效操作has为O1而不是on:
这将过滤所有假值,只保留你在问题中提出的真值。如果你想要相反的值,只需添加一个 改用。
var statesDD = document.querySelector('select[title="State"]')
.filter((state) => !(states_served.includes(state.options[i].value)));
const states_served = new Set(["Connecticut", "Delaware", "Maine", "Maryland", "Massachusetts", "New Hampshire", "New Jersey", "New York", "North Carolina", "Pennsylvania", "Rhode Island", "Vermont", "Virginia", "West Virginia"]);
let statesDD = document.querySelector('select[title="State"]')
.filter(state => states_served.has(state.options[i].value));