将网址转化为map或对象,方便取值

1. URL

复制代码
function getQuerySearchParams(key) {
    var urlObj = new URL(location.href);
    return urlObj.searchParams.get(key);
}

2. URLSearchParams

复制代码
function getQuerySearchParams(key) {
    var urlObj = new URL(location.href);
    console.log(urlObj.searchParams instanceof URLSearchParams) // true
    return urlObj.searchParams.get(key);
}

3. reduce

复制代码
const URL_SEARCH ='?source=baidupc_utmId_5100&plan=A005-qglrgmc&unit=a010-mp4&keyword=mp4zgif&keywordid=20210343653&bd_vid=7019318071742353099'
var urlObj = URL_SEARCH.slice(1) // 去掉第一个?号字符
.split('&')
.filter(Boolean)
.reduce((cur, val)=> {
    const idx = val.indexOf('=') // 获取第一个=号所在的下标
    cur[(val.substring(0, idx))] = encodeURIComponent(val.substring(idx+1));

    return cur;
}, {})
const getQuerySearchParams = (key) => urlObj[key]
console.log(getQuerySearchParams('unit'))

4. 正则

注意\w没有包含所有的字符, 发现比较特殊的添加一下并仔细验证一下!!!

复制代码
var url ='?source=baidupc_utmId_5100&plan=A005-qglrgmc&unit=a010-mp4&keyword=mp4zgif&keywordid=20210343653&bd_vid=7019318071742353099'
function getQuerySearchParams(key) {
    var obj = {};
    url.replace(/\??([\w-]+)=([\w-]+)&?/g, function(_, matchKey, matchValue) {
       if (!obj[matchKey]) {
        obj[matchKey] = matchValue;
       } else {
           var temp = obj[matchKey];
           obj[matchKey] = [].concat(temp, matchValue);
       }
    });
    if (!key) {
        return obj;
    } else {
        for (let ele in obj) {
            if (ele = key) {
                return obj[ele];
            }
        }
        return '';
    }
}
console.log(getQuerySearchParams('unit'))
相关推荐
lichenyang4535 分钟前
NestJS + Socket.IO 鉴权、用户房间与幂等邀请
前端·后端
paopaokaka_luck6 分钟前
基于springboot3+vue3+uniapp的剧本杀预约小程序(AI角色对话、协同过滤算法、地图Api、Echarts图形化分析)
java·前端·spring boot·学习·echarts
lichenyang4536 分钟前
React 实时通知与异步竞态处理
前端·后端
三十而立洋12 分钟前
搭建现代化 Git 提交规范:commitlint + czg + husky + lint‑staged 完整实战
前端
半个落月14 分钟前
React + Vite Todo 实践:用 Axios 与 Mock 解开前后端等待
前端
qq_3168377515 分钟前
uniapp 安卓/H5 使用 contentEditable 属性 富文本编辑器
android·javascript·uni-app
yuqifang16 分钟前
var deferred = jQuery.Deferred(); 使用示例
前端·javascript·面试
阳火锅17 分钟前
领导夸我日报越写越详细了,其实我只敲了 npm run commit
前端·javascript·人工智能
lichenyang45318 分钟前
实时团队邀请的架构与数据流
前端·后端
一鸣AI编程19 分钟前
AI UI 测试平台从 0 到 1:8 次跑通一条 19 步用例的实战复盘
前端