仿写一个 nodejs 中 queryString 的 parse 方法

nodejs

queryString

queryString.parse(str, [sep], [eq], [options])

接收一个 URL 为参数,将 URL 中的查询信息,一对象的形式返回。如果有同一个查询信息有多个值,这些值将以数组的形式呈现。

  • str 要解析的网址查询字符串
  • sep 用于在查询字符串中分隔键值对的子字符串。 默认值: '&'。
  • eq 用于在查询字符串中分隔键和值的子字符串。 默认值: '='。
  • options
    • decodeURIComponent 当对查询字符串中的百分比编码字符进行解码时使用的函数。 默认值: querystring.unescape()。
    • maxKeys 指定要解析的最大键数。 指定 0 以删除键的计数限制。 默认值: 1000。

这里简单实现一个转换查询信息的功能

const queryString = {
  parse: function (url) {
    if (!url) return null;
    let str = url.includes("?") ? url.split("?")[1] : url;
    let items = str.split("&");
    let result = {}
    let arr = [];
    let i = 0;
    for (; i < items.length; i++) {
      arr = items[i].split('=');
      if (result[arr[0]]) {
        if (Array.isArray(result[arr[0]])) {
          result[arr[0]].push(arr[1])
        } else {
          result[arr[0]] = [result[arr[0]], arr[1]]
        }
      } else {
        result[arr[0]] = arr[1];
      };
    };
    return result;
  },
};

export default queryString;

使用:

import queryString from '@/utils/queryString';

queryString.parse('xxx?query=domain_group&query=domain_group1&query=domain_group2&query2=domain_group2')
/* 返回值
{
  query: (3) ["domain_group", "domain_group1", "domain_group2"]
  query2: "domain_group2"
}
*/ 
posted @ 2021-07-05 10:47  真的想不出来  阅读(114)  评论(0编辑  收藏  举报