FED2 获取 url 参数

1.描述

获取 url 中的参数

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

示例:

输入:http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe key
输出:[1, 2, 3]

2.思路

将字符串切割,保存在对象中。根据题目要求,分为两种情况,指定参数名称、不指定参数名称,其中特殊情况为存在多个同名参数,返回数组。

3.代码

题解的的方法:未完全理解

function getUrlParam(sUrl, sKey) {
    //http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe key
    var paramArr = sUrl.split('?')[1].split('#')[0].split('&');
    const obj = {};
    paramArr.forEach(element => {
        const [key, value] = element.split('=');
        if (obj[key] === void 0) {
            obj[key] = value
        } else {
            obj[key] = [].concat(obj[key], value);
        }
    });
    return sKey === void 0 ? obj : obj[sKey] || ''
}

排行中的方法:

function getUrlParam(sUrl, sKey) {
    var param = sUrl.split('#')[0].split('?')[1];
    if (sKey){//指定参数名称
        var strs = param.split('&');
        var arrs = new Array();//如果存在多个同名参数,则返回数组
        for(var i = 0, len = strs.length; i < len; i++){
            var tmp = strs[i].split('=');
            if(tmp[0] == sKey){
                arrs.push(tmp[1]);
            }
        }
        if (arrs.length == 1){//返回该参数的值或者空字符串
            return arrs[0];
        } else if (arrs.length == 0){
            return "";
        } else {
            return arrs;
        }
    } else {//不指定参数名称,返回全部的参数对象 或者 {}
        if(param == undefined || param == ""){
            return {};
        } else {
            var strs = param.split('&');
            var arrObj = new Object();
            for(var i = 0, len = strs.length; i < len; i++){
                var tmp = strs[i].split('=');
                if (!(tmp[0] in arrObj)) {
                    arrObj[tmp[0]] = [];
                }
                arrObj[tmp[0]].push(tmp[1]);               
            }
            return arrObj;
        }
    }
}

你可能感兴趣的:(FED2 获取 url 参数)