从url中批量删除所有查询字符串?

时间:2017-09-19 13:01:09

标签: javascript query-string ecmascript-5

我们想要从给定的网址中删除多个查询字符串参数。例如:

如果网址是:

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中批量删除查询字符串?

5 个答案:

答案 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));

Try it

答案 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)

旧帖子,但这是我更干净的解决方案。我正在使用lodashquery-string库。

import qs from "query-string";
import _ from "lodash";

let query = qs.parse(location.search);

_.map(query, function(value, key) {
        return delete query[key];
      });