2

I have a URL that is comprised of multiple filters that are named and have corresponding search criteria, I cannot change the way these urls are constructed.

I am aware of how to get query string parameters in a scenario where I am just trying to get the value of one parameter, however I can't seem to figure out how to associate them together appropriately. For example here is the url:

/AllItems.aspx?FilterName=FilterA&FilterMultiValue=*FilterASearchValue*&FilterName=FilterB&FilterMultiValue=*FilterBSearchValue*"

I would like to get the values from this url so that I can associate Filter A with the FilterA Search Value and Associate Filter B with the FilterB Search Value

3 Answers 3

4

you can use reduce to do that:

var u='/AllItems.aspx?FilterName=FilterA&FilterMultiValue=*FilterASearchValue*&FilterName=FilterB&FilterMultiValue=*FilterBSearchValue*'

u.split(/[?&]/).reduce(function(a,b,c){
  var p=b.split("="), k=p[0], v=decodeURIComponent(p[1]);
  if(!p[1])return a;
  a[k]=a[k]||[];
  a[k].push(v);
 return a;
}, {})

which returns an array of params instead of a string, allowing same-name params to repeat:

{   
    "FilterName": [
        "FilterA",
        "FilterB"
    ],
    "FilterMultiValue": [
        "*FilterASearchValue*",
        "*FilterBSearchValue*"
    ]
}
Sign up to request clarification or add additional context in comments.

Comments

2

Another solution which works in modern browsers:

let params = (new URL(document.location)).searchParams;
let values = params.getAll("param-name");

Comments

0
function getParamsFromUrl() {
  var query = location.search.substr(1);
  var params = query.split("&");
  var result = {};
  for(var i=0; i<params.length; i++) {
    var item = params[i].split("=");
    result[item[0]] = item[1];
  }
  return result;
}

OR, TO GET MULTIPLES VALUES:

function getParamsFromUrl() {
  var query = location.search.substr(1);
  var params = query.split("&");
  var result = {};
  for(var i=0; i<params.length; i++) {
    var item = params[i].split("=");

    const key = item[0].replace(/\[|\]/g, '')
    const value = item[1]

    if(!result[key]) result[key] = [value]
    else result[key].push(value)

  }
  return result;
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.