2014-12-13 62 views
1

URL參數值我有以下網址:時得到的參數定義多次

products?feature_filters[]=&feature_filters[]=on&feature_filters[]=on 

從這個我需要一個數組,像這樣:

var feature_filters = [1, 2] 

注:由於MightyPork已經指出的那樣,這將是從零開始的..所以我需要拒絕0,並保持1和2

我已經成功地採用這種example獲得,當他們被定義一次URL參數。但是我無法解析由我的應用程序創建的這組參數。

+0

'變種feature_filters = [2,3]'是的JavaScript。你在使用node.js還是什麼?此外,它會是[1,2],因爲它基於零。 – MightyPork 2014-12-13 15:35:19

+0

如果你看一下時間feature_filters []出現在URL的數量,你可以看到,第二次和第三次的參數值=「上」 ..基本上我需要爲了從這個URL值1和2在我的應用程序中使用它們。 – Abram 2014-12-13 15:36:50

回答

0

您可以通過同樣的方式,參數在你的鏈接答案擴大,以環,但不是剛剛返回的第一場比賽,建立一個對象,其中每個屬性是查詢字符串條目的名稱,幷包含一個數組它的價值,基本上是一個數組字典。

然後,對於一個特定的鍵,就可以循環通過它的陣列,並找到其索引被設置:

// groups all parameters together into a dictionary-type object 
function getUrlParameterGroups() 
{ 
    var sPageURL = window.location.search.substring(1); 

    var paramGroups = {}; 
    var sURLVariables = sPageURL.split('&'); 
    for (var i = 0; i < sURLVariables.length; i++) 
    { 
     var paramParts = sURLVariables[i].split('='); 
     var sParameterName = paramParts[0]; 
     // first time we've seen it - add a blank array 
     if(!paramGroups.hasOwnProperty(sParameterName)) 
     { 
      paramGroups[sParameterName] = []; 
     } 

     // ad to the array 
     if(paramParts.length > 1) 
     { 
      paramGroups[sParameterName].push(paramParts[1]); 
     } 
     else 
     { 
      // handle not having an equals (eg y in x=1&y&z=2) 
      paramGroups[sParameterName].push(''); 
     } 
    } 

    return paramGroups; 
} 

// gets which indices of the specified parameter have a value set 
function getSetUrlParameters(sParameterName) 
{ 
    var arr = getUrlParameterGroups()[sParameterName]; 
    return arr.reduce(function(previousValue, currentValue, index) { 
     if(currentValue != '') { // or if(currentValue == 'on') 
      previousValue.push(index); 
     } 
     return previousValue; 
    }, []); 
} 

var result = getSetUrlParameters('feature_filters[]'); 
console.log(result); 

Working Fiddle

+0

令人驚歎。謝謝。 – Abram 2014-12-13 16:13:27