t-comm
Version:
专业、稳定、纯粹的工具库
87 lines (84 loc) • 3.48 kB
JavaScript
import _defineProperty from '@babel/runtime/helpers/defineProperty';
import { formatUrlParams } from './format-url-params.mjs';
import { resolveUrlParams } from './resolve-url-params.mjs';
import '@babel/runtime/helpers/slicedToArray';
function simpleRemoveUrlParams() {
var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var removeKeyArr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
if (!url.includes('?') || !removeKeyArr.length) {
return url;
}
var list = url.split('?');
var query = list[1].split('&').reduce(function (acc, item) {
var list = item.split('=');
return Object.assign(Object.assign({}, acc), _defineProperty({}, list[0], list[1]));
}, {});
var queryStr = Object.keys(query).filter(function (item) {
return !removeKeyArr.includes(item);
}).map(function (item) {
return "".concat(item, "=").concat(query[item]);
}).join('&');
if (!queryStr) {
return list[0];
}
return "".concat(list[0], "?").concat(queryStr);
}
function isSimpleUrl() {
var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
return url.indexOf('?') === url.lastIndexOf('?');
}
/**
* @export removeUrlParams
* @description 移除参数
* @param {string} url 地址
* @param {string} removeKeyArr 待移除的参数名集合
* @returns 重新拼接的地址
* @example
* // 地址是 hash 模式参数
* removeUrlParams('http://www.test.com/#/detail?a=1&b=2&c=3', ['a', 'b']);
* // => 'http://www.test.com/#/detail?c=3'
* @example
* // 地址 history 模式参数并存
* removeUrlParams('http://www.test.com?a=1&b=2&c=3', ['a', 'b']);
* // => 'http://www.test.com?c=3'
* @example
* // 地址 history 模式参数并存 + 强制 history 模式返回
* removeUrlParams('http://www.test.com?a=1&b=2&c=3', ['a', 'b'], true);
* // => 'http://www.test.com?c=3'
* @example
* // 全部参数移除完,返回不带 query 的地址
* removeUrlParams('http://www.test.com?a=1&b=2&c=3', ['a', 'c', 'b'], true);
* // => 'http://www.test.com'
* @example
* // hash 模式下 query 全部移除,会保留末尾的 ?
* removeUrlParams('http://www.test.com?a=1&b=2&c=3#/detail?d=4', ['a', 'b', 'c', 'd']);
* // => 'http://www.test.com/#/detail?'
* @example
* // hash 模式和 history 模式参数并存
* removeUrlParams('http://www.test.com?a=1&b=2&c=3#/detail?d=4', ['a', 'd']);
* // => 'http://www.test.com/#/detail?b=2&c=3'
* @example
* // 地址是 hash 模式和 history 模式参数并存,且是多个参数
* removeUrlParams('http://www.test.com?d=4&f=6#/detail?a=1&b=2&c=3', ['a', 'd']);
* // => 'http://www.test.com/#/detail?f=6&b=2&c=3'
*/
function removeUrlParams() {
var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var removeKeyArr = arguments.length > 1 ? arguments[1] : undefined;
var forceHistoryMode = arguments.length > 2 ? arguments[2] : undefined;
if (isSimpleUrl(url)) {
return simpleRemoveUrlParams(url, removeKeyArr);
}
// 获取链接上的所有参数
var urlParamsObj = resolveUrlParams(url);
// 移除指定的key集合
var keepParamsObj = {};
Object.keys(urlParamsObj).forEach(function (key) {
if (!removeKeyArr.includes(key)) {
keepParamsObj[key] = urlParamsObj[key];
}
});
// 根据移除后的参数集合,重新拼接地址
return formatUrlParams(url, keepParamsObj, forceHistoryMode);
}
export { removeUrlParams };