对象转url参数或url参数转对象

将对象转为路径参数

实现思路:

  • Object.keys(obj):将给定对象组成数组,
    参数:要返回其枚举的自身属性的对象
    返回值:给定对象所有可枚举属性的字符串数组

    let obj = {
      name: "张三",
      age: 23,
    };
    console.log(Object.keys(obj)); // ['name','age']
    

    在这里插入图片描述

  • filter:过滤符合条件的值返回为新的数组

  • ignoreFields: 不想转为 url 参数的属性值

  • 剔除value值为 null undefined ‘’ 的属性

  • map:将数据进行修改组成新的数组返回

  • join:将数组拼接为最终的参数字符串返回

export function objToUrlParam(obj, ignoreFields = []) {
    let newObj = Object.keys(obj)
    // 判断是否是空对象
    if(newObj.length == 0){
        return null
    }
    return Object.keys(obj)
        .filter(
        (key) =>
            ignoreFields.indexOf(key) === -1 &&
            obj[key] !== null &&
            obj[key] !== undefined &&
            obj[key] !== ""
        )
        .map((key) => key + "=" + obj[key])
        .join("&");
}

获取路径参数转为对象

实现思路:

  • Object.keys(obj):处理字符串,返回索引值数组

    console.log(Object.keys('?name=张三&age=23'))) // ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14']
    

    在这里插入图片描述

  • 判断传过来的字符串是不是空字符串

  • decodeURIComponent: 可对 url 进行解码,(必须一个字符串),decodeURIComponent() 对编码后的 URI 进行解码(如果传递过来的 url 是通过 encodeURIComponent 编码过的)

    • encodeURIComponent() 函数可把字符串作为 URI 组件进行编码
    console.log(decodeURIComponent("https://www.baidu.com/?name=张三&age=23")); // 'https://www.baidu.com/?name=张三&age=23'
    

    在这里插入图片描述

  • substring:提取字符介于两个指定下标之间的字符,通过indexOf查找?的下标在此基础到字符串长度末尾的字段截取查出来

  • split:通过特殊字符截取成键值对形式的数组,拼接成对象返回

export function objectDecode(url) {
  let arr = Object.keys(url);
  // 判断传过来的字符串是不是空字符串判断传过来的字符串不是空字符串
  if (arr.length === 0) {
    return {};
  } else {
    url = decodeURIComponent(url);
    let obj = {};
    let keyvalue = [];
    let key = "";
    let value = "";
    let paraString = url.substring(url.indexOf("?") + 1, url.length).split("&");
    for (let i in paraString) {
      keyvalue = paraString[i].split("=");
      key = keyvalue[0];
      value = keyvalue[1];
      obj[key] = value;
    }
    return obj;
  }
}

获取url内指定的某个值

export function objectDecode(url) {

	if (!url) url = window.location.href;
    name = name.replace(/[\[\]]/g, "\\$&");
    //匹配所有符合条件的,并取最后一个
    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)", 'g');
    var results = url.match(regex);
    var tempResults = results != null && results[results.length - 1] != undefined ? results[results.length - 1] : '';

    var finalResults = regex.exec(tempResults);
    if (!finalResults) return "";
    if (!finalResults[2]) return '';
    return decodeURIComponent(finalResults[2].replace(/\+/g, " "));
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值