从查询字符串JS中删除空参数[关闭]

问题描述 投票:0回答:3

我有这个查询字符串:

"paymentMethod=1&fullname=&persona=&companyName=&countryName=&email=&totalCameras=&camerasOwned=&cameraShares=&snapmailCount=&sessionCount=&createdAtDate=&lastLoginAtDate=&telephone=&sort=created_at%7Cdesc&limit=50&page=1"

我正在尝试删除所有空参数并将其变为:

"paymentMethod=1&sort=created_at%7Cdesc&limit=50&page=1"

我采取了这种方法:

let searchParams = Object.fromEntries(new URLSearchParams(queryString))
let filteredParams = Object.fromEntries(
  Object.entries(searchParams).filter(([_, value]) => value != "")
)
console.log(new URLSearchParams(filteredParams).toString())
console.log(searchParams)

但是我不确定这一点,使用

new URLSearchParams
两次,是更好更正确的方法吗?

任何指导将不胜感激。

javascript url url-parameters query-string
3个回答
7
投票

它的功能较少,但您可以创建一个

URLSearchParams
对象,然后迭代它和具有空值的
.delete
键:

const queryString = "paymentMethod=1&fullname=&persona=&companyName=&countryName=&email=&totalCameras=&camerasOwned=&cameraShares=&snapmailCount=&sessionCount=&createdAtDate=&lastLoginAtDate=&telephone=&sort=created_at%7Cdesc&limit=50&page=1"

const params = new URLSearchParams(queryString);
[...params.entries()].forEach(([key, value]) => {
  if (!value) {
    params.delete(key);
  }
});
const cleaned = String(params);
console.log(cleaned);

原生的

URLSearchParams.forEach
,有点像
getElementsByClassName
,是live,所以你不能在其中使用
.delete
,否则下一个键值对将被跳过——从而扩展
.entries
迭代器首先到一个新数组。


1
投票

使用 query-string 包更安全。

将您的参数定义为对象,然后调用

stringify
方法,它将为您处理
undefined
和空值

params = {
  paymentMethod: 1,
  fullname: 'John',
  created_at: undefined,
  test: '',
};

// cleaned object will be "paymentMethod=1&fullname=John"
const cleaned = queryString.stringify(params);

1
投票
for ([key, value] of Object.entries(searchParams)) {
  if (value == '') searchParams.delete(key)
}
© www.soinside.com 2019 - 2024. All rights reserved.