You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现从当前URL解析查询字符串为键值对数组的函数?

解析URL查询字符串为键值对数组的实现方案

没问题,这是前端开发里挺常见的需求,我给你几个实用的实现思路和代码示例:

基础实现(满足你的核心需求)

最直接的方式就是利用浏览器提供的window.location.search来获取查询字符串,然后做简单的切割处理:

function getQueryParametersArray() {
  // 获取URL中带?的查询字符串部分,比如"?product=shoes&price=59.99&color=red"
  const queryString = window.location.search;
  
  // 如果没有查询参数,直接返回空数组
  if (!queryString) return [];
  
  // 去掉开头的?,再用&分割成单个键值对元素
  return queryString.slice(1).split('&');
}

// 测试用例(假设当前URL是http://example.com?product=shoes&price=59.99&color=red)
const parameters = getQueryParametersArray();
console.log(parameters); // 输出:["product=shoes","price=59.99","color=red"]

进阶优化:处理特殊场景

如果你的业务场景需要考虑一些边缘情况,可以用下面的优化版本:

1. 过滤空的键值对

如果URL的查询字符串末尾多了一个&(比如http://example.com?product=shoes&price=59.99&),基础版本会返回一个空字符串元素。可以加个过滤逻辑去掉这些无效项:

function getCleanQueryParametersArray() {
  const queryString = window.location.search;
  if (!queryString) return [];
  
  return queryString.slice(1)
    .split('&')
    .filter(pair => pair.trim() !== ''); // 过滤空字符串
}

2. 解码URL编码的参数值

有时候参数值会包含特殊字符(比如空格、&),这些字符会被URL编码成%20、%26之类的格式。如果需要返回解码后的真实键值对,可以加上解码逻辑:

function getDecodedQueryParametersArray() {
  const queryString = window.location.search;
  if (!queryString) return [];
  
  return queryString.slice(1)
    .split('&')
    .filter(pair => pair.trim() !== '')
    .map(pair => decodeURIComponent(pair)); // 解码每个键值对
}

// 测试用例(URL为http://example.com?name=John%20Doe&hobby=reading%26hiking)
const decodedParams = getDecodedQueryParametersArray();
console.log(decodedParams); // 输出:["name=John Doe", "hobby=reading&hiking"]

根据你的需求描述,基础版本完全能满足要求;如果有特殊的业务场景,再选择对应的优化版本就好。

内容的提问来源于stack exchange,提问作者cap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:10:56