J'ai une chaîne de requête d'URL

?filter%5B%22customer_rating_heading%22%5D=customer_rating_6_up%2Ccustomer_rating_7_up%2Ccustomer_rating_9_up&map=1

Lequel est

?filter["customer_rating_heading"]=customer_rating_6_up,customer_rating_7_up,customer_rating_9_up&map=1

Je veux demander filter comme params.get('filter) et obtenir

[customer_rating_heading => 'customer_rating_6_up,customer_rating_7_up,customer_rating_9_up' //(later I'll make array from this string)

Mais je ne sais pas comment faire ça, j'ai essayé let query = Object.fromEntries(new URLSearchParams(location.search) mais ça me donne:

{filter["customer_rating_heading"]: "customer_rating_6_up,customer_rating_7_up,customer_rating_9_up"
map: "1"}

Mais je ne peux pas obtenir de filtre comme query.filter il est toujours indéfini

Quelqu'un connaît-il une solution à un tel problème?

0
Lizard Derad 2 juin 2020 à 15:43

3 réponses

Meilleure réponse

Vous pouvez utiliser URLSearchParams.entries. Voici un exemple:

let query = new URLSearchParams(location.search);

for(var pair of query.entries()) {
  console.log("Filter:",pair[0]); // "filter['customer_rating_heading']"
  console.log("Result:",pair[1]) // "customer_rating_6_up,customer_rating_7_up,customer_rating_9_up"
}

Voici un codepen que vous pouvez essayer.

1
Gh05d 2 juin 2020 à 13:50

Si vous souhaitez accéder à votre filtre, vous pouvez utiliser cet extrait:

let [filter] = Object.keys(query).map( key => query[key] )
1
Wonkledge 2 juin 2020 à 13:28

Solution avec "match"

let query = Object.fromEntries(new URLSearchParams(location.search))

let firstKey = Object.keys(query)[0];
let found = firstKey.match(/\[(.*)\]/)[1]

let key = found.replace(/\"/g, '');
let value = query[firstKey];



console.log(`${key} => ${value}`)
1
Isa 2 juin 2020 à 14:06