1. 在地址栏添加参数/修改参数 返回新的拼接结果
function addUrlParams(args, search = window.location.search || '') {
if (Object.prototype.toString.call(args) !== '[object Object]') {
throw new Error('addUrlParams(): 参数类型不正确')
return
}
var obj = {}
if (search) {
// 否则 search.split('?') 报错
var search = search.split('?')[1]
const arr = search.split('&').forEach(element => {
var itemArr = element.split('=')
var key = itemArr[0]
var value = itemArr[1]
obj[key] = decodeURIComponent(value)
});
}
var arrResult = []
var resultObj = Object.assign(obj, args)
for (var item in resultObj) {
arrResult.push(item + '=' + resultObj[item])
}
return '?' + arrResult.join('&')
}
console.log(addUrlParams({ ab: '周芳冰'}, '?aaa=2333'))
先将现有的地址栏参数转化为对象,将传入的参数对象与现有的参数对象合并,合并可以做到(去重:后一个覆盖前一个,起到了修改的作用/合并)
2. 移除浏览器参数
function removeUrlParams(key, search = window.location.search || '') {
if (typeof key !== 'string') {
throw new Error('addUrlParams(): 参数类型不正确')
return
}
var obj = {}
if (search) {
var search = search.split('?')[1]
const arr = search.split('&').forEach(element => {
var itemArr = element.split('=')
var key = itemArr[0]
var value = itemArr[1]
obj[key] = decodeURIComponent(value)
});
}
delete obj[key]
var arrResult = []
for (var item in obj) {
arrResult.push(item + '=' + obj[item])
}
return '?' + arrResult.join('&')
}
console.log(removeUrlParams('aa', '?aaa=2333&bbb=344&ccc=33434'))