URL 与对象的转换

Posted by violetks on November 10, 2020

一、获取 URL 中的参数,转为对象

function getUrlParams (url) {
  var index = url.indexOf('?') + 1;
  var paramsArr = url.substr(index).split('&');
  var obj = {};
  paramsArr.forEach(function (value, index1, array) {
    var tempArr = value.split('=');
    var key = tempArr[0];
    obj[key] = tempArr[1];
  })
  return obj;
}

var str = 'http://www.runoob.com/user?name=xl&pwd=love&sex=女&age=22';
var object = getUrlParams(str);
console.log(object);
function getUrlParams () {
  var url = window.location.href;
  var args = url.split('?');
  if (args[0] == url) {
    return "";
  }
  var arr = args[1].split('&');
  var obj = {};
  for (var i = 0; i < arr.length; i++) {
    var arg = arr[i].split('=');
    obj[arg[0]] = arg[1];
  }
  return obj;
}

var object = getUrlParams();
console.log(object);

二、将对象转为 URL 参数

方式一:正则替换
先将对象转为字符串,利用正则表达式将:转换为=,将"转换为空,将,转换为&,再去掉两端的{}

function getURL (obj) {
  var str = JSON.stringify(obj);
  var str1 = str.replace(/:/g, "=");     // 使用=代替:
  var str2 = str1.replace(/"/g, '');     // 去掉"
  var str3 = str2.replace(/,/g, '&');    // 使用&代替,
  var str4 = str3.match(/\{([^)]*)\}/);  // 去掉{}
  return str4[1];
}

var object = { name: "xl", age: 18 };
getURL(object);

方式二:遍历循环处理
遍历对象进行拼凑,将数据转换为key=value的格式,再将=转换为&

function getURL (obj) {
  var _result = [];
  for (var key in obj) {
    var value = obj[key];
    if (value.constructor == Array) {
      value.forEach(function (_value) {
        _result.push(key + "=" + _value);
      });
    } else {
      _result.push(key + '=' + value);
    }
  }
  console.log(_result.join('&'));
}

var object = { name: "xl", age: 18 };
getURL(object);

三、JS字符串操作函数

charAt(),返回在指定位置的字符。
concat(),字符串拼接,返回一个新字符串。
indexOf(),返回某个指定的字符串值在字符串中首次出现的位置,没有匹配返回 -1。
match(),检查一个字符串是否匹配一个正则表达式,返回一个结果数组。
replace(),正则匹配,替换。
slice(),提取字符串片段,并在新的字符串中返回被提取的部分。
substr(),从起始索引号提取字符串中指定数目的字符。
https://www.runoob.com/jsref/jsref-obj-string.html

四、Array对象方法

slice(),选取数组的一部分,并返回一个新数组。
splice(),从数组中添加或删除元素。