首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用URLSearchParams删除URL参数

使用URLSearchParams删除URL参数
EN

Stack Overflow用户
提问于 2022-08-17 19:37:51
回答 1查看 37关注 0票数 1

我正在使用URLSearchParams API从我的URL中的查询字符串中删除键/值。

我有以下片段:

代码语言:javascript
复制
params = new URLSearchParams('a=x&b=y&c=z');
params.forEach(function(value, key){
  console.log("Deleted: ", key, value, params.toString());
  params.delete(key);
});
console.log("Left with: ", params.toString());

Left with:总是返回部分查询参数。

JSFiddle上的输出:

代码语言:javascript
复制
☁️ "Running fiddle"
"Deleted: ", "a", "x", "a=x&b=y&c=z"
"Deleted: ", "c", "z", "b=y&c=z"
"Left with", "b=y"

我对forEach()的理解是,它将遍历所有键/值对,但基于这个小提琴,它似乎退出了倒数第二对的循环。

根据以下评论中的反馈意见编辑:

我试图有选择地保留一个或两个参数(基于提供的列表)。

代码语言:javascript
复制
params = new URLSearchParams('a=x&b=y&c=z&d=1');
params.forEach(function(value, key){
  retainList = ['d'];
  if (retainList.includes(key)){
    console.log("Retaining ", key);
  } else {
    console.log("Deleted: ", key, value, params.toString());
    params.delete(key);
  }
});
console.log("Left with: ", params.toString());
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-17 19:57:57

URLSearchParams似乎出现了一些奇怪的引用问题。即使您使用.keys()方法获取键列表,它似乎也在引用它的内部键列表。

您可以通过使用铺展克隆密钥列表来解决此问题。

代码语言:javascript
复制
params = new URLSearchParams('a=x&b=y&c=z');
keys = [...params.keys()]
for (key of keys) {
  console.log("Deleting: ", key, params.get(key), params.toString());
  params.delete(key)
};
console.log("Left with: ", params.toString());

要达到预期效果,您可以这样做:

代码语言:javascript
复制
params = new URLSearchParams('a=x&b=y&c=z&d=1');
retainList = ['d']

for (key of [...params.keys()]) {
  if (! retainList.includes(key)) {
    console.log("Deleting: ", key, params.get(key), params.toString());
    params.delete(key)
  }
};
console.log("Left with: ", params.toString());

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73394065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档