我建立了一个实用功能。您传递一个值数组,它会检查所有这些值是否是查询字符串中的键。如果所有值都是查询字符串中的键,则返回true,否则返回false。
这是功能:
function hasParams(haystack, needle){
var keys = [];
var needles = $.isArray( needle ) ? needle : [needle];
var needles_len = needles.length;
var found = 0;
if(!haystack.indexOf('?') > 0){
return false;
}
var query = haystack.substr(haystack.indexOf('?') + 1).split("&");
for(var i=0;i<query.length;i++){
var key = query[i].split("=")[0];
keys.push(key);
}
for(var j=0;i<keys.length;j++){
for(var k=0;i<needles.length;k++){
if(keys[j] == needles[k]){
found++;
}
if(needles_len == found){
return true;
}
}
}
return false;
}
这应该返回true(因为查询字符串包含status_filter_is和user_filter_is),但它返回false:
hasParams("/contacts/56f33c236d616354c0020000/tasks?contactable_type=Lead&id=56f33c236d616354c0020000&status_filter_is=unresolved&user_filter_is=all&action=index&controller=tasks&contact_id=56f33c236d616354c0020000&sort=date_due&direction=asc&page=", ['status_filter_is', 'user_filter_is'])
答案 0 :(得分:1)
您的所有for
循环中间都有i
而不是j
或k
。
答案 1 :(得分:1)
首先i<keys.length;
应为j<keys.length;
其次i<needles.length;
应为k<needles.length;