将对象转为路径参数
实现思路:
-
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, " "));
}