最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 编程题:实现一个解析URL参数的方法

    正文概述 掘金(姜子牙下山)   2021-03-06   571

    题目要求

    实现一个自定义方法,解析URL中的参数,即返回最终的query string对象即可。

    举个例子:

    输入:

    const url = 'http://sample.com/?a=1&b=2&c=xx&d=2#hash';

    输出:

    // 拆解URL参数中queryString,返回一个 key - value 形式的 object
    const result = { a: '1', b: '2', c: 'xx', d: '' };
    

    实现

    方法一

    第一种方法主要是利用字符串分割和数组操作,拿到关键的字符串,再做一下类型转换,组成最终的结果。主要技术点是要熟悉StringArray的相关API,灵活运用。

    const getUrlParams = (url) => {
      const arrSearch = url.split('?').pop().split('#').shift().split('&');
      let obj = {};
      arrSearch.forEach((item) => {
        const [k, v] = item.split('=');
        obj[k] = v;
        return obj;
      });
      return obj;
    };
    

    方法二

    第二种方法利用了 Web API 提供的 URLURLSearchParams 对象实现的,用起来非常简单,缺点是兼容性不是很完美,不兼容IE系列浏览器。

    const getUrlParams2 = (url) => {
      const u = new URL(url);
      const s = new URLSearchParams(u.search);
      const obj = {};
      s.forEach((v, k) => (obj[k] = v));
      return obj;
    };
    

    方法三

    第三种方法通过正则表达式(捕获组,匹配不在集合中的字符)解析标准的query-string键值对字符串,然后巧妙地利用 string.replace方法的第二个参数可以作为回调函数进行一些操作,得到最终结果,写起来是最简洁的,但是写正则真的是头疼。

    const getUrlParams3 = (url) => {
      // 定义一个 parse url.search 的方法
      function parse(url) {
        const obj = {};
        url.replace(/([^?&=]+)=([^&]+)/g, (_, k, v) => (obj[k] = v));
        return obj;
      }
      url = url.split('#').shift();
      return parse(url);
    };
    

    测试代码

    测试一下

    function test() {
      const url = 'http://sample.com/?a=1&b=2&c=xx&d=2#hash';
      // const res = getUrlParams(url);
      // const res = getUrlParams2(url);
      const res = getUrlParams3(url);
      console.log(res);
    }
    
    test();
    

    起源地下载网 » 编程题:实现一个解析URL参数的方法

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元