2016-04-08 13 views
1

私はユーティリティ関数を作成しました。値の配列を渡し、それらの値がすべてクエリ文字列のキーであるかどうかをチェックします。すべての値がクエリ文字列のキーである場合は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; 
} 

これは(クエリ文字列がstatus_filter_isとuser_filter_isの両方を含んでいるため)trueを返す必要がありますが、それは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

する必要があります。まずi<keys.length;は、第二j<keys.length;

i<needles.length;でなければなりませんが、 'hasParams( "?FOO =バー")'有効なクエリ文字列のですか? if(!haystack.indexOf( '?')> 0){'は意図したとおりに動作しません。私はちょうど 'if(haystack.indexOf( '?')=== -1){' – Hamms

+0

をお勧めします。重複したキーはあなたに奇妙な振る舞いを与えます。 '?foo = bar&foo = baz '、例えば – Hamms

答えて

1

あなたforループのすべて持っています中央のijまたはkの代わりに。

+0

愚かな間違い。それを見つけてくれてありがとう。私はできる時に正しいとマークします。 – Donato

関連する問題