【发布时间】:2018-10-13 03:14:46
【问题描述】:
背景
我正在尝试使用 javascript 开发搜索/过滤算法,但我很困惑。我有一个度数数组,其中包含度数名称以及与之关联的过滤器。我的 filterSearch() 函数获取用户从 HTML 字段中选择的过滤器。 getDept() 函数只返回一个部门值,而 getSearchValue() 则返回多选字段的值。
filterSearch() 函数获取用户选择的过滤器,并使用 include 方法将其与度数数组中的过滤器进行比较。该函数中的两个 for 循环进行比较,如果碰巧有一个过滤器不是用户选择的一部分,则退出循环。如果检查仍然为真,则将其推送到结果数组以输出给用户。
问题
假设我选择“Bachelor、Business、Traditional 和 Main_Campus”作为用户的过滤器,它会将第一个学位毫无问题地推送到结果中,并过滤掉第二个学位。然而!假设我选择“Bachelor、Associate、Business、Traditional 和 Main_Campus”,我也希望将第二个学位添加到结果中,但两者都不会被推送。我做了一些调试,结果发现它说“Bachelor”不包含在第一学位中,“Associate”不包含在第二学位中。
我愿意接受所有建议和解决方案,我希望得到一些指导。
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;
}
【问题讨论】:
-
我修改了我的代码并让它按照我的意愿工作,如果你想查看它,它在我的 git repo 上。 github.com/jennicar/OOP/tree/searchEngine
标签: javascript jquery search web filter