javascript 提取 url 参数列表本质是解析查询字符串为键值对数组,推荐用 url 或 urlsearchparams 构造函数自动解码并遍历 entries() 转为 {key, value} 对象数组。

JavaScript 中提取 URL 参数列表,本质是解析查询字符串(query string)并转为键值对数组。不是遍历普通数组,而是把 URL 的 ?a=1&b=2&c= 这类字符串拆解成 [{key: 'a', value: '1'}, {key: 'b', value: '2'}, ...] 形式的数组。
从完整 URL 提取参数并转为对象数组
先用 URL 构造函数安全解析 URL,再遍历其 searchParams——这是最推荐、兼容性好(现代浏览器)、且自动处理编码的方法:
- 创建
URL实例,传入目标 URL 字符串(如window.location.href或自定义链接) - 调用
url.searchParams.entries()获取可迭代的键值对 - 用
Array.from()或展开运算符[...]转为数组,再用map映射为对象结构
示例代码:
const url = new URL('https://example.com/?name=张三&age=25&city=%E5%8C%97%E4%BA%AC&tag=&flag');
const paramsArray = Array.from(url.searchParams.entries()).map(([key, value]) => ({
key,
value // 自动解码,value 是 '张三'、'25'、'北京',空值 '' 也保留
}));
// 结果:[{key:"name",value:"张三"}, {key:"age",value:"25"}, ...]
仅处理查询字符串(无协议域名部分)
如果已有 query string(如 "?a=1&b=2&c" 或 "a=1&b=2"),需先清理开头的 ?,再用 URLSearchParams 构造:
- 用
str.replace(/^\?/, '')去掉可选的问号 - 传给
new URLSearchParams(...),它能正确解析a=1&b=2&c(c 无等号时 value 为空字符串) - 同样用
entries()+map转结构
示例:
const queryString = '?utm_source=web&utm_medium=link&ref';
const clean = queryString.replace(/^?/, '');
const params = [...new URLSearchParams(clean).entries()].map(([k, v]) => ({ key: k, value: v }));
// → [{key:"utm_source",value:"web"}, {key:"utm_medium",value:"link"}, {key:"ref",value:""}]
手动分割(不推荐,仅作了解)
避免使用 split('&') 和 split('=') 手动解析——它无法正确处理编码字符(如空格变 + 或 %20)、嵌套等号、缺失 value 等边界情况。若必须手写(如兼容极老环境),至少要用 decodeURIComponent 解码,并分段处理:
- 用
split('&')得到每组字符串 - 对每组用
indexOf('=')判断是否有等号,截取 key 和 value - 分别对 key 和 value 调用
decodeURIComponent(注意捕获异常)
常见注意事项
提取后得到的是数组,可直接用 filter、find、some 等方法操作。例如:
- 过滤掉空 value:
paramsArray.filter(p => p.value) - 找某个参数:
paramsArray.find(p => p.key === 'id') - 转为普通对象(非数组):
Object.fromEntries(url.searchParams)
注意:URLSearchParams 默认忽略重复 key(只保留最后一个),如需保留所有(如 ?tag=a&tag=b),得手动解析或用 getAll() 配合循环。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











