Когда я читаю подобное, меня терзают сомнения - все ли здесь так, как следовало бы, не лишнее ли здесь.
Что я могу сказать. Не знаю что за продуты, как выбираются и что отправляется серверу. Но предположим, что ваши "безымянные" радио кнопки как-то это определяют, то есть серверу нужны два списка. Они у вас и есть два, которым перезаписывается содержимое. А всего таких пар данных для этих списков может быть до восьмерки на боку.
Даем первому списку имя "width", второму "height", под такими же именами определяем и две переменные со значением по умолчанию 0.
Список заполняется опциями, это цикл, в цикле проверяется текущее значение со значением window[this.name], и если равно, опция выбирается.
При выборе в списке значение его сохраняется в переменной - window[this.name] = this.value. А при сравнении, при построении списка уж как хотите, выбирайте ближайший или ... Ближайший или равный, это искать в массиве значение соответствующего списка до тех пор пока значение не будет больше window[select.name]. Берем предыдущий элемент и заканчиваем поиск - это будет либо равно window[select.name], либо ближайшее меньшее window[select.name] значение. Либо возвращаем 0, если ничего не найдено.
Но это все прелюдии, а остальное, то что у вас, это нечто. Скажите, как это может быть, что параметры товаров, которых есть определяемые значения администратором в базе или на худой конец в переменных, и на сервере, явно прописывают циферки в js-коде? Сервер должен отдавать клиенту эти данные, с ними он должен работать, а никак не
for (let i = 100; i <= 800; i += 10) ... и $("#param_1 option:selected").text().
Если это возможно, а у вас возможно, вы вообще не должны оперировать конкретными свойствами объекта данных для этих списков. Пусть ваши радио кнопки имеют значения 0 и 1. На сервере задаются параметры ширины и высоты для списков как диапазон с шагом. То есть, в базе прописано для значения 0: width => min = 100, max = 800, step = 10, height => min = 100, max = 600, step = 50, для значения 1 другие.
Например, сервер, это РНР (на другом языке будет по другому, что не суть важно), по этим параметрам готовится массив данных, который будет описывать все данные для вашего кода, в частности для списков:
$data = [
0 => [
'width' => range($row->width->min, $row->width->max, $row->width->step),
'height' => range($row->height->min, $row->height->max, $row->height->step)
],
1 => [
'width' => range($row->width->min, $row->width->max, $row->width->step),
'height' => range($row->height->min, $row->height->max, $row->height->step)
]
];
Это будут массивы значений для списков полученные по указанным диапазонам с указанным шагом. Эти данные отдаются клиенту как JSON. Данные, с которыми будет работать клиентский сценарий в текущий момент, определяются значением выбранной кнопки. В общем с таким подходом. А если width_1, width_2, let i = 100; i <= 800; i += 10, то это уже караул, не вникая что это вообще такое, даже не понять что тут есть что, и ломать мозги этим нет никакого желания.