Skip to content

解析查询字符串参数

给定一个 URL 字符串,要求返回一个查询字符串参数组成的对象。

注:要求查询字符串参数的值不包含 hash 值

Code

javascript
/**
 * 从给定的 URL 字符串中返回查询字符串参数
 * @param {string} url
 * @returns {Record<string, string>}
 */
function parseQueryString(url) {
  const ans = {};
  const arr = url.split('?')[1]?.split('#')?.[0];
  if (arr) {
    arr.split('&').forEach((item) => {
      const temp = item.split('=');
      // 如果要包含中文,可以使用 decodeURIComponent() 方法进行转换
      ans[temp[0]] = temp[1];
    });
  }
  return ans;
}

Test Cases

javascript
const { parseQueryString } = require('./parseQueryString.js');

describe('parseQueryString', () => {
  const URL1 = 'https://www.baidu.com?q=123&b=456#head';
  const URL2 = 'https://www.baidu.com?q=123&b=456';
  const URL3 = 'https://www.baidu.com';
  const URL4 = 'https://www.baidu.com?q=123#head';
  const URL5 = '';
  it('should be empty object', () => {
    expect(parseQueryString(URL5)).toEqual({});
    expect(parseQueryString(URL3)).toEqual({});
  });
  it('should returns a query string object without hash', () => {
    expect(parseQueryString(URL1)).toEqual({ q: '123', b: '456' });
    expect(parseQueryString(URL2)).toEqual({ q: '123', b: '456' });
    expect(parseQueryString(URL4)).toEqual({ q: '123' });
  });
});