2014-12-13 50 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