自定义查询字符串解析器返回错误的结果

时间:2016-04-08 22:48:57

标签: javascript

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

其次i<needles.length;应为k<needles.length;