Фон
Я пытаюсь разработать алгоритм поиска / фильтрации с помощью JavaScript, и я в тупике. У меня есть массив степеней с именем степени вместе с фильтрами, связанными с ним. Моя функция filterSearch () получает фильтры, которые пользователь выбрал из полей HTML. Функция getDept () возвращает только одно значение отдела, в то время как getSearchValue () возвращает значения из полей множественного выбора.
Функция filterSearch () получает выбранные пользователем фильтры и сравнивает их с фильтрами в массиве градусов, используя метод include. Два цикла for в этой функции выполняют сравнение и выходят из цикла, если обнаруживается, что фильтр не является частью того, что выбрал пользователь. Если проверка все еще имеет значение true, она помещается в массив результатов для вывода пользователю.
Проблема
Скажем, я выбираю "Бакалавр, Бизнес, Традиционный и Main_Campus" в качестве фильтров пользователя, он без проблем помещает первую степень в результаты и отфильтровывает вторую степень. Тем не мение! Допустим, я выбрал «Бакалавр, Ассоциированный, Бизнес, Традиционный и Main_Campus». Я хотел бы, чтобы вторую степень добавили к результатам, но обе не будут отталкиваться. Я провел некоторую отладку, и оказалось, что в нем говорится, что «бакалавр» не входит в первую степень, а «младший» нет во второй степени.
Я открыт для всех предложений и решений, я хотел бы получить некоторые рекомендации.
var degrees = [
{degree: "Business Administration", filters: "Business Bachelor Traditional Main_Campus"},
{degree: "Applied Science", filters: "Business Associate Online Main_Campus"}
]
function filterSearch(){
var filters = getFilters();
var array = [];
var check = false;
var results = [];
for (var i = 0; i < degrees.length; i++){
array = degrees[i].filters.split(' ');
for (var j = 0; j < array.length; j++){
if (filters.includes(array[j])) { check = true; }
else {
check = false;
break;
}
}
if (check == true) results.push(degrees[i]);
}
}
function getFilters(){
var filters = [];
var d = this.getDeptVal();
var p = this.getSearchValue('#programType');
var f = this.getSearchValue('#formatType');
var l = this.getSearchValue('#locationType');
filters.push(d); filters.push(p); filters.push(f); filters.push(l);
return filters;
}
function getDeptVal(){
var selected = $('#departmentType option:selected').text();
return selected;
}
function getSearchValue(searchId){
var selected = $(searchId).val();
var toString = selected.toString();
return toString;
}