在JavaScript中获取URL参数数组可以通过多种方式实现。以下是一些常见的方法:
URLSearchParams
是一个内置的浏览器API,可以方便地处理URL参数。
// 假设当前URL是 https://example.com/?param1=value1¶m2=value2
// 获取URLSearchParams对象
const params = new URLSearchParams(window.location.search);
// 将参数转换为数组
const paramsArray = Array.from(params.entries());
console.log(paramsArray); // 输出: [["param1", "value1"], ["param2", "value2"]]
如果需要兼容不支持 URLSearchParams
的环境,可以手动解析查询字符串。
// 假设当前URL是 https://example.com/?param1=value1¶m2=value2
// 获取查询字符串并去掉开头的'?'
const queryString = window.location.search.substring(1);
// 将查询字符串按'&'分割成数组
const paramsArray = queryString.split('&').map(param => {
const [key, value] = param.split('=');
return [decodeURIComponent(key), decodeURIComponent(value)];
});
console.log(paramsArray); // 输出: [["param1", "value1"], ["param2", "value2"]]
也可以使用正则表达式来提取参数。
// 假设当前URL是 https://example.com/?param1=value1¶m2=value2
const queryString = window.location.search.substring(1);
const paramsArray = queryString.match(/([^=&]+=[^&]*)/g).map(param => {
const [key, value] = param.split('=');
return [decodeURIComponent(key), decodeURIComponent(value)];
});
console.log(paramsArray); // 输出: [["param1", "value1"], ["param2", "value2"]]
decodeURIComponent
可以解码这些字符。// 处理重复参数
const paramsMap = new Map();
paramsArray.forEach(([key, value]) => {
if (paramsMap.has(key)) {
if (Array.isArray(paramsMap.get(key))) {
paramsMap.get(key).push(value);
} else {
paramsMap.set(key, [paramsMap.get(key), value]);
}
} else {
paramsMap.set(key, value);
}
});
console.log(paramsMap); // 输出: Map { "param1" => "value1", "param2" => "value2" }
通过以上方法,你可以灵活地在JavaScript中获取和处理URL参数数组。