解析 URL Params 为对象

let url = 'http://www.domain.com/?user=anonymous&id=123&id=456&city=%E5%8C%97%E4%BA%AC&enabled';
parseParam(url)
/* 结果
{ user: 'anonymous',
id: [ 123, 456 ], // 重复出现的 key 要组装成数组,能被转成数字的就转成数字类型
city: '北京', // 中文需解码
enabled: true, // 未指定值得 key 约定为 true
}
*/
function parseParam(url) {
const paramsStr = /.+\?(.+)$/.exec(url)[1]; // 将 ? 后面的字符串取出来
const paramsArr = paramsStr.split('&'); // 将字符串以 & 分割后存到数组中
let paramsObj = {};
// 将 params 存到对象中
paramsArr.forEach(param => {
if (/=/.test(param)) { // 处理有 value 的参数
let [key, val] = param.split('='); // 分割 key 和 value
val = decodeURIComponent(val); // 解码
val = /^\d+$/.test(val) ? parseFloat(val) : val; // 判断是否转为数字 if (paramsObj.hasOwnProperty(key)) { // 如果对象有 key,则添加一个值
paramsObj[key] = [].concat(paramsObj[key], val);
} else { // 如果对象没有这个 key,创建 key 并设置值
paramsObj[key] = val;
}
} else { // 处理没有 value 的参数
paramsObj[param] = true;
}
}) return paramsObj;
}
const getUrlKey = function (name) {
return (
decodeURIComponent(
(new RegExp("[?|&]" + name + "=" + "([^&;]+?)(&|#|;|$)").exec(
location.href
) || [, ""])[1].replace(/\+/g, "%20")
) || null
)
}
 
/**
* 封装检验数据类型
*/
 const isType = type => target => `[object ${type}]` ===              Object.prototype.toString.call(target)
const isArray = isType('Array')
console.log(isArray(''))
/**
* 存储localStorage
*/
export const setStore = (name, content) => {
if (!name) return
if (typeof content !== 'string') {
content = JSON.stringify(content)
}
window.localStorage.setItem(name, content)
} /**
* 获取localStorage
*/
export const getStore = name => {
if (!name) return
return window.localStorage.getItem(name)
} /**
* 删除localStorage
*/
export const removeStore = name => {
if (!name) return
window.localStorage.removeItem(name)
} /**
* 设置cookie
*/
export const setCookie = (key, value, day) => {
const date = new Date()
date.setDate(date.getDate() + day)
document.cookie = key + '=' + value + ';expires=' + date + ';path=/'
} /**
* 获取cookie
*/
export const getCookie = cname => {
const name = cname + '='
const ca = document.cookie.split(';')
for (let i = 0; i < ca.length; i++) {
let c = ca[i]
while (c.charAt(0) === ' ') c = c.substring(1)
if (c.indexOf(name) !== -1) return c.substring(name.length, c.length)
}
return ''
} /**
* 删除cookie
*/
export const delCookie = name => {
const exp = new Date()
exp.setTime(exp.getTime() - 1)
const cval = getCookie(name)
if (cval != null) {
document.cookie = name + '=' + cval + ';expires=' + exp.toGMTString() + ';path=/'
}
} /**
* 获取url参数
*/
export const getUrlId = name => {
const reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)')
const r = window.location.search.substr(1).match(reg)
if (r != null) return unescape(r[2])
return null
}

最新文章

  1. nodejs进阶(4)—读取图片到页面
  2. EF架构~豁出去了,为了IOC,为了扩展,改变以前的IRepository接口
  3. 【poj1001】 Exponentiation
  4. 如何精通java技术
  5. Thinkphp学习04
  6. Kafka connect快速构建数据ETL通道
  7. ntity Framework技巧系列之四 - Tip 13 – 15
  8. Java中的定时任务
  9. Linux软件包管理之RPM命令
  10. OrCAD Capture CIS 16.6 在原理图页面内放置图片
  11. win10系统桌面快捷键图标异常解决方法
  12. git分散式版本管理系统,从安装到基本使用
  13. &lt;文档学习&gt;AirSim/using_car.md Choosing Your Vehicle: Car or Multirotor
  14. [LeetCode] 1. Two Sum_Easy
  15. 20155327 Exp9 Web安全基础
  16. A1043 Is It a Binary Search Tree (25 分)
  17. 使用devenv/MSBuild在命令行编译sln或csproj
  18. SpringMVC系列(十六)Spring MVC与Struts2的对比
  19. PHP访问数缓存处理
  20. ElasticStack系列之六 &amp; 版本冲突处理之乐观锁

热门文章

  1. 如何下载windows版的kubectl.exe文件
  2. E04 【买衣服】Do you have this T-shirt in red?
  3. 201871010121 王方 《面向对象程序设计(JAVA)》第七周学习总结
  4. python27期day06:小数据池、深浅拷贝、集合、作业题。
  5. Linux学习笔记-第3天 - 勤能补拙
  6. 复杂模拟 | 1017 模拟N个顾客M个柜台进行排队
  7. k8s学习路线
  8. .NET Core创建Worker Services
  9. contentType: &#39;application/json&#39; C#后台怎么处理
  10. SDK-基于Windows环境搭建