获取 url 参数


前言


一、题目描述?

描述

获取 url 中的参数

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

示例1

输入:

http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe key

输出:

[1, 2, 3]

二、解题

1.解法1

代码如下:

export const getUrlParam = (sUrl, sKey) => {
    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] || ''   // 如果该方法为一个参数,则返回对象。
    //如果为两个参数,sKey存在,则返回值或数组,否则返回空字符。
}

2.解法2

代码如下:

function getUrlParam(sUrl, sKey) {
var result, sParam = {};
    sUrl.replace(/(\?|&)(\w+)=(\w+)/g, function(k0, k3, k1, k2){
        // console.log(k0, k1, k2, k3);
        // 函数中k0,k1,k2, k3分别代表原字符串,(?|&),(\w+),(\w+)
        sParam[k1] === void 0 ? sParam[k1] = k2 : sParam[k1] = [].concat(sParam[k1], k2);
    });
    console.log(sUrl);
    sKey === void 0 || sKey === '' ? result = sParam : result = sParam[sKey] || '';
    return result;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值