【问题标题】:JavaScript Search/Filter algorithm using includes使用包含的 JavaScript 搜索/过滤算法
【发布时间】: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;
}

【问题讨论】:

标签: javascript jquery search web filter


【解决方案1】:

也许你需要这样一个过滤器:

var degrees = [
    {degree: "Business Administration", filters: "Business Bachelor Traditional Main_Campus"},
    {degree: "Applied Science", filters: "Business Associate Online Main_Campus"}
    ];


function get_degrees_by_filters(_filters){
	var found=[];
	var temp_degrees=degrees.slice(0); //clone original array
	var input_filters_arr=_filters.split(' ');
	for(var key in temp_degrees){
		var degree=temp_degrees[key].degrees;
		var filters=temp_degrees[key].filters;
		var filters_arr=filters.split(' ');
		for(var key_f in filters_arr){
			for(var key_if in input_filters_arr){
				filter=input_filters_arr[key_if];
			    if(filters_arr[key_f]==filter){
				     if(temp_degrees[key]){
				         found.push(temp_degrees[key]);
				         delete  temp_degrees[key];
				     }
			    }


			}
		}
	}
	return found;
}
<input type="button" value="filters: Bachelor" onclick="console.log(get_degrees_by_filters('Bachelor'));"/></br>
<input type="button" value="filters: Associate" onclick="console.log(get_degrees_by_filters('Associate'));"/></br>
<input type="button" value="filters: Bachelor Associate" onclick="console.log(get_degrees_by_filters('Bachelor Associate'));"/></br>
<input type="button" value="filters: Associate Online" onclick="console.log(get_degrees_by_filters('Associate Online'));"/></br>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多