О каких select'ах идёт речь:
const first = document.querySelector('#first');
const second = document.querySelector('#second');
Кого надо скрывать - объект, ключами которого являются значения option'ов первого select'а (эти выбираем), а значениями - массивы значений option'ов второго select'а (а эти прячем):
const hideOptions = {
1: [ '12', '14', '15' ],
2: [ '1', '11', '16' ],
};
Слушаем на первом select'е событие change, переключаем видимость optoin'ов во втором:
first.addEventListener('change', function() {
Array.prototype.forEach.call(second, function(n) {
n.hidden = this.includes(n.value);
}, hideOptions[this.value] ?? []);
});
или
.hidden {
display: none;
}
first.onchange = e => {
const toHide = hideOptions[e.target.value];
for (const n of second) {
n.classList.toggle('hidden', toHide?.indexOf(n.value) > -1);
}
};