如何从URL字符串中删除一些参数?

Com*_*ode 2 javascript url parsing angularjs

我有一个var存储字符串,代表一个充满参数的URL.我正在使用AngularJS,我不确定是否有任何有用的模块(或者可能使用普通的JavaScript)来删除不需要的URL参数而不必使用正则表达式?

例如,我需要删除&month=05以及&year=2017:

var url = "at merge ?derivate=21&gear_type__in=13&engine=73&month=05&year=2017"

Mis*_*lis 6

您可以使用此功能是需要2个参数:param您要删除和您source URL:

function removeParam(key, sourceURL) {
    var rtn = sourceURL.split("?")[0],
        param,
        params_arr = [],
        queryString = (sourceURL.indexOf("?") !== -1) ? sourceURL.split("?")[1] : "";
    if (queryString !== "") {
        params_arr = queryString.split("&");
        for (var i = params_arr.length - 1; i >= 0; i -= 1) {
            param = params_arr[i].split("=")[0];
            if (param === key) {
                params_arr.splice(i, 1);
            }
        }
        rtn = rtn + "?" + params_arr.join("&");
    }
    return rtn;
}

var url = "at merge ?derivate=21&gear_type__in=13&engine=73&month=05&year=2017";

var url2 = removeParam("month", url);
var url3 = removeParam("year", url2);

console.log(url3);
Run Code Online (Sandbox Code Playgroud)


正则表达式的替代解决方案


geo*_*awg 6

使用URLSearchParams API:

var url = "at merge ?derivate=21&gear_type__in=13&engine=73&month=05&year=2017"
var urlParts = url.split('?');
var params = new URLSearchParams(urlParts[1]);
params.delete('month');
params.delete('year')
var newUrl = urlParts[0] + '?' + params.toString()
console.log(newUrl);
Run Code Online (Sandbox Code Playgroud)

使用此API的优势在于,它可以与正确的百分比编码一起使用并创建字符串

有关更多信息,请参见MDN开发人员参考-URLSearchParams API。