多次定义参数时获取URL参数值

时间:2014-12-13 15:33:45

标签: javascript

我有以下网址:

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

从这里我需要得到一个数组,如下:

var feature_filters = [1, 2] 

注意:正如MightyPork指出的那样,这将是从零开始的......所以我需要拒绝0,并保持1和2。

我已成功使用此example获取一次定义的URL参数。但是我无法解析由我的应用程序创建的这组参数。

1 个答案:

答案 0 :(得分: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