从查询字符串 JS 中删除空参数

Jun*_*ooq 3 javascript url url-parameters query-string

我有这个查询字符串:

"paymentMethod=1&fullname=&persona=&companyName=&countryName=&email=&totalCameras=&camerasOwned=&cameraShares=&snapmailCount=&sessionCount=&createdAtDate=&lastLoginAtDate=&telephone=&sort=created_at%7Cdesc&limit=50&page=1"
Run Code Online (Sandbox Code Playgroud)

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

"paymentMethod=1&sort=created_at%7Cdesc&limit=50&page=1"
Run Code Online (Sandbox Code Playgroud)

我采取了这种方法:

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)
Run Code Online (Sandbox Code Playgroud)

但我不确定这一点,使用new URLSearchParams两次,这是一个更好、正确的方法吗?

任何指导将不胜感激。

Cer*_*nce 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);
Run Code Online (Sandbox Code Playgroud)

native URLSearchParams.forEach,有点像getElementsByClassName,是live,所以你不能.delete在它里面,否则下一个键值对将被跳过 - 因此迭代器.entries首先传播到一个新数组。