出身背景
我正试图用javascript开发一个搜索/过滤算法,我被难住了。我有一个度数数组,其中包含度数名称以及与其关联的过滤器。函数的作用是:获取用户从HTML字段中选择的过滤器。函数getDept()只返回一个部门值,而getSearchValue()从多个选择字段返回值。
函数的作用是:获取用户选择的过滤器,并使用includes方法将其与度数组中的过滤器进行比较。该函数中的两个for循环进行比较,如果碰巧有一个过滤器不是用户选择的一部分,则中断循环。如果检查仍然为true,则将其推送到结果数组上,以输出给用户。
问题所在
假设我选择“学士、商业、传统和Main\u校园”作为用户的过滤器,它会毫无问题地将第一个学位推送到结果上,并过滤掉第二个学位。然而假设我选择了“学士、副学士、商科、传统和主校区”,我也希望将第二个学位添加到结果中,但这两个学位都不会受到影响。我做了一些调试,结果显示“学士”不包括在一级学位中,“副学士”不包括在二级学位中。
我愿意接受所有建议和解决方案,我希望得到一些指导。
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;
}