题解 | #获取 url 参数#
获取 url 参数
http://www.nowcoder.com/practice/a3ded747e3884a3c86d09d88d1652e10
将每种情况都分别判断一下就好,面向测试用例编程
// 获取url后的参数或传入的url后的参数
function urlQuery(url, key) {
let params = url.split("?")[1].replace(/\#.*/, '')
// 判断是否含有参数
if (params) {
let paramsList = params.split("&")
/**
* 判断是否含有key值
* 如果含有key值,只需要针对该key值进行修改即可
*/
if (key) {
let list = paramsList.filter(val => val.indexOf(key) !== -1)
// 如果数组有长度,则证明有值
if (list.length) {
let result = []
for (let i = 0; i < list.length; i++) {
result.push(list[i].split("=")[1])
}
// 如果值不止一个,返回数组
return result.length > 1 ?
result :
result[0]
}
return ''
} else {
let
// 排序,将一类参数排列在一起
list = paramsList.sort(),
// 记录前一个参数值,如果参数值相同,则归类到同一个数组元素中
preKey = ""
return list.reduce((pre, next) => {
let [key, val] = next.split("=")
if (preKey === key) {
// 如果前后两个参数相同,则创建数组并将元素添加进去
if (Array.isArray(pre[key])) {
pre[key].push(val)
} else {
pre[key] = [pre[key], val]
}
} else {
pre[key] = val
}
preKey = key
return pre
}, {})
}
}
return ''
} 
