当我们使用jQuery库时,我们通常使用$.param()函数来将一个对象序列化为一个字符串形式的参数列表,以便可以在URL,Ajax请求等中使用。但是如果我们需要在没有引入jQuery的情况下使用该函数,我们可以考虑使用原生JS来实现。
下面是用原生JS实现$.param()函数的方法:
1. 将一个对象序列化为查询字符串
将一个对象序列化为查询字符串的方法如下:
function serializeObj(obj) {
let str = [];
for (let p in obj) {
if (obj.hasOwnProperty(p)) {
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
}
}
return str.join("&");
}
该函数首先创建一个空数组,并使用for...in遍历对象属性,在每次迭代中,它检查属性是否为对象自身属性,并使用encodeURIComponent()方法对属性名和属性值进行编码,然后将编码后的键值对以“=”号连接起来,最后用"&"号将所有的键值对连接在一起。
下面是一个使用该函数将对象序列化为字符串的示例:
let data = { name: "Alice", age: 25, gender: "female" };
let queryString = serializeObj(data);
console.log(queryString); //"name=Alice&age=25&gender=female"
2. 将一个数组对象序列化为查询字符串
如果我们需要将一个包含多个对象的数组序列化为查询字符串,我们可以使用类似上面的方法,只是在遍历属性时需要使用数组的下标来作为参数名。具体实现如下:
function serializeArr(arr) {
let str = [];
for (let i = 0; i < arr.length; i++) {
for (let p in arr[i]) {
if (arr[i].hasOwnProperty(p)) {
str.push(encodeURIComponent(`${p}[${i}]`) + "=" + encodeURIComponent(arr[i][p]));
}
}
}
return str.join("&");
}
该函数遍历数组中的对象,然后遍历对象属性并使用参数名“[下标]”和encodeURIComponent()方法对属性名和属性值进行编码,最后将编码后的键值对连接起来。
下面是一个使用该函数将数组序列化为字符串的示例:
let data = [
{ name: "Alice", age: 25, gender: "female" },
{ name: "Bob", age: 30, gender: "male" },
{ name: "Charlie", age: 35, gender: "male" }
];
let queryString = serializeArr(data);
console.log(queryString); //"name%5B0%5D=Alice&age%5B0%5D=25&gender%5B0%5D=female&name%5B1%5D=Bob&age%5B1%5D=30&gender%5B1%5D=male&name%5B2%5D=Charlie&age%5B2%5D=35&gender%5B2%5D=male"
注意到,在上面的示例中,参数名中的方括号“[]”需要进行编码。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生JS实现$.param() 函数的方法 - Python技术站