如何使用URLSearchParams删除空查询参数?

时间:2020-07-20 05:47:17

标签: javascript node.js url url-parameters

我正在使用查询参数,并被介绍给URLSearchParams。我正在用它来形成这种要查询的对象,

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

在这里,我不想拥有c=,因为它很丑陋,我的API不需要它。

所以,我想要这个结果a=hello+World&b=23(无空查询字符串) 但是,我在mdn文档上找不到任何内容。

我应该怎么做?

这样做无效,因为它似乎直接突变了params,从而影响了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());

3 个答案:

答案 0 :(得分:2)

您可以遍历键值对并删除具有空值的键:

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

let params = new URLSearchParams(x);
let keysForDel = [];
params.forEach((v, k) => {
  if (v == '')
    keysForDel.push(k);
});
keysForDel.forEach(k => {
  params.delete(k);
});
console.log(params.toString());

答案 1 :(得分:0)

我自己做的一种干净方法如下(使用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)
});

答案 2 :(得分:-1)

从JavaScript ES5 +中的查询中删除无用参数的简单方法:

for (let param in query) /* You can get copy by spreading {...query} */
 
 if (query[param] === undefined /* In case of undefined assignment */
     || query[param] === null 
     || query[param] === "")
     
     delete query[param];

return new URLSearchParams(query).toString();