我们想要从给定的网址中删除多个查询字符串参数。例如:
如果网址是:
VariableValue.ValueText AS Author,
VariableValue.ValueText AS Subject
和 如果要删除的查询字符串参数是:" so"," kms"," pn",该函数的输出应为:
https://www.example.com?budget=0-&year=0-&kms=0-&so=-1&sc=-1&pn=1
我们为此编写了以下代码:
https://www.example.com?budget=0-&year=0-&sc=-1

有没有更好的方法从url中批量删除查询字符串?
答案 0 :(得分:1)
可以使用Map:
string[] allowed = { "(", ")", "a", "and", "b", "c", "d", "e", "or", "xor", "!" };
string[] words = logic.Split(new char[]{}, StringSplitOptions.RemoveEmptyEntries);
bool allAllowed = words.All(w => allowed.Contains(w, StringComparer.OrdinalIgnoreCase));
答案 1 :(得分:0)
是的 - 使用图书馆而不是尝试做任何复杂的事情。我推荐URIJS,就像这样:
var uri = new URI("https://www.example.com?budget=0-&year=0-&kms=0-&so=-1&sc=-1&pn=1");
uri.removeSearch(["so", "kms", "pn"]);
alert( uri.toString() );
有关详细信息,请参阅https://medialize.github.io/URI.js/docs.html#search-remove。
答案 2 :(得分:0)
您可以使用此代码使用大部分split()
函数来实现所需目标:
var input = "https://www.example.com?budget=0-&year=0-&kms=0-&so=-1&sc=-1&pn=1";
var domain = input.split("?")[0];
var queryStrings = input.split("?")[1].split('&');
var removeFilterSet = {"so" : true,"kms" : true,"pn" : true};
var resArray = [];
queryStrings.forEach(function(value, key){
var queryName = value.split('=')[0];
if(!removeFilterSet[queryName]){
resArray.push(value);
}
});
var finalUrl = domain+'?'+resArray.toString().replace(/,/g,'&');
console.log(finalUrl);
答案 3 :(得分:0)
这是使用Array.prototype.reduce()
的解决方案:
let input = "https://www.example.com?budget=0-&year=0-&kms=0-&so=-1&sc=-1&pn=1",
[domain, qs] = input.split('?'),
removeFilterSet = ['so', 'kms', 'pn'],
filtered = qs.split('&').reduce((acc, param) => {
return removeFilterSet.includes(param.split('=')[0]) ?
acc : `${acc}&${param}`;
}, '');
console.log(domain + '?' + filtered);

答案 4 :(得分:0)
旧帖子,但这是我更干净的解决方案。我正在使用lodash和query-string库。
import qs from "query-string";
import _ from "lodash";
let query = qs.parse(location.search);
_.map(query, function(value, key) {
return delete query[key];
});