zoukankan      html  css  js  c++  java
  • 获取url参数的精简代码

    题目描述

    获取 url 中的参数

    1. 指定参数名称,返回该参数的值 或者 空字符串
    2. 不指定参数名称,返回全部的参数对象 或者 {}
    3. 如果存在多个同名参数,则返回数组

    输入例子:

    getUrlParam('http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe', 'key')
    

    输出例子:

    [1, 2, 3]
    

    方法

    function getUrlParam(sUrl,sKey){    
        var result = {};    
        sUrl.replace(/??(w+)=(w+)&?/g,function(a,k,v){        
            if(result[k] !== void 0){
                var t = result[k];
                result[k] = [].concat(t,v);
            }else{
                result[k] = v;
            }
        });
        if(sKey === void 0){
            return result;
        }else{ 
            return result[sKey] || '';
        }
    }
    

    思路其实都差不多:

    1. 匹配出key=value中的key和value;
    2. 需要返回对象,则匹配结果用对象存储起来,result[k] = v;
    3. 需要处理多个同名参数情况,利用concat拼接(concat返回的是数组副本)
    4. 需要考虑,输入了参数可是参数没对应,与没传入sKey 的情况

    其实就是根据题目要求做出对应的返回,以及考虑问题要全面点(函数健壮性)。

    可能有问题的地方

    function(a,k,v),各输入参数是什么意思?

    第一个参数a是整个匹配的字符串(例如上题,第一次会等于?key=1,第二次会等于key=2&,第三次会等于key=3&),接下来依次是正则里面的分组(小括号括起来为一组,),详情请查看正则表达式的replace方法。

    为啥[].concat(t,v)不能写成t.concat(v)?

    如果用t.concat(v),如果t不是数组,会变成字符串拼接。我们要用的concat方法是数组里那个。而第一个出现的t是字符串。

    void 0 是啥?void有如下作用:

    1. 通过采用void 0取undefined比采用字面上的undefined更靠谱更安全,应该优先采用void 0这种方式。
    2. 填充<a>的href确保点击时不会产生页面跳转;
      填充<image>的src,确保不会向服务器发出垃圾请求。
  • 相关阅读:
    方便学习的小idea---技术文章搜索--提高搜索的效率,准确性,有用性
    学习技术的思考
    python学习记录
    大数据的5个大
    业务系统与门户集成
    项目的集成
    记录说的好的话语
    Java过滤器引发的异常:Resource interpreted as Stylesheet but transferred with MIME type text/html
    11g创建表空间和用户(不区分大小写)与导入导出命令
    3. mysql中常用的字符与时间函数
  • 原文地址:https://www.cnblogs.com/macq/p/6550885.html
Copyright © 2011-2022 走看看