自定义查询字符串分析器返回不正确的结果

custom query string parser returns incorrect result

本文关键字:不正确 结果 返回 分析器 查询 字符串 自定义      更新时间:2024-03-14

我构建了一个实用程序函数。您向它传递一个值数组,它会检查所有这些值是否都是查询字符串中的键。如果所有值都是查询字符串中的键,则返回 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'])

所有for循环的中间都有i,而不是jk

首先i<keys.length;应该j<keys.length;

其次,i<needles.length;应该k<needles.length;