思路
切割字符串,封装进行返回。
// 获取 url 中的参数
// 1. 指定参数名称,返回该参数的值 或者 空字符串
// 2. 不指定参数名称,返回全部的参数对象 或者 {}
// 3. 如果存在多个同名参数,则返回数组
function getUrlParam (sUrl, sKey) {
// 将参数变成二维数组
let keyvalArray = sUrl.split('#')[0].split('?')[1].split('&')
for (let i = 0; i < keyvalArray.length; i++) {
keyvalArray[i] = keyvalArray[i].split('=')
}
console.log('参数数组', keyvalArray)
if (sKey) { //指定参数
let tempArray = []
// 将指定参数存进数组
for (let i = 0; i < keyvalArray.length; i++) {
if (sKey === keyvalArray[i][0]) {
if (keyvalArray[i][1]) {
tempArray.push(keyvalArray[i][1])
} else {
tempArray.push('')
}
} else {
continue
}
}
if (tempArray.length < 1) { //返回空字符串
return ''
} else if (tempArray.length === 1) {//一个返回值
return tempArray[0]
} else {// 多个返回数组
return tempArray
}
} else { //不指定参数
if (keyvalArray === undefined || keyvalArray === '') {
return {}
} else {
let obj = {}
for (let i = 0; i < keyvalArray.length; i++) { // 多个同名参数返回数组
if (!(keyvalArray[i][0] in obj)) { // 如果参数名不在对象里,进行初始化。保证同名参数放在数组里
obj[keyvalArray[i][0]] = []
}
obj[keyvalArray[i][0]].push(keyvalArray[i][1])
}
// 一个参数返回值
Object.keys(obj).forEach(element => {
if (obj[element].length === 1) {
obj[element] = obj[element].toString()
}
})
return obj
}
}
}
console.log(getUrlParam('http://www.nowcoder.com?key=1&key=2&key=3&key=4&test1=4#hehe'))
// 测试用例
// function t () { var a = getUrlParam('http://www.nowcoder.com?key=1&key=2&key=3&key=4&test1=4#hehe'); return a.key.join('') === '1234'; }