web-dev-qa-db-fra.com

Comment supprimer des paramètres de requête vides à l'aide de UrlSearchParams?

Je travaillais avec les paramètres de requête et j'ai été présenté à URLSearchParams . Je l'utilise pour former ce type d'objet à interroger,

const x = {
  a: 'hello World'
  b: 23
  c: ''
}
let params = new URLSearchParams(x);
console.log(params.toString()) // a=hello+World&b=23&c=

Ici, je ne veux pas avoir ça c=, comme c'est moche, et mon API n'en a pas besoin.

Donc, je veux ce résultat a=hello+World&b=23 (sans chaîne de requête vide) mais, je n'ai rien trouvé sur les documents MDN.

Comment suis-je censé faire ça?

Faire cela ne fonctionne pas, car il semble directement muté le params qui affecte le forEach:

const x = {
  a: 'hello World',
  b: '',
  c: ''
};

let params = new URLSearchParams(x);
params.forEach((v, k) => { // never reaches `c`
  console.log(k, ' => ', v)
  if (v == '')
    params.delete(k);
});
console.log(params.toString());
7
aeXuser264

Un chemin propre je le fais moi-même est le suivant (en utilisant Lodash):

import omitBy from 'lodash/omitBy';
import isEmpty from 'lodash/isEmpty';

const x = {
  a: 'hello World'
  b: 23
  c: ''
}

const params = new URLSearchParams(omitBy(x, isEmpty));

// mixing other sets
const params = new URLSearchParams({
  otherParam: 'foo', 
  ...omitBy(x, isEmpty)
});
0
r712m