仿写一个 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  真的想不出来  阅读(135)  评论(0)    收藏  举报