推荐答案
// www.javascriptcn.com code example
function parseQueryString(str) {
if (!str) return {};
return str.split('&').reduce((acc, pair) => {
const [key, value] = pair.split('=');
if (key) {
acc[decodeURIComponent(key)] = value ? decodeURIComponent(value) : null;
}
return acc;
}, {});
}本题详细解读
题目要求
实现一个函数 parseQueryString(str),将查询字符串解析为对象。例如,输入 "name=John&age=30",输出 { name: "John", age: "30" }。
解题思路
- 字符串分割:首先,使用
split('&')将查询字符串按&分割成多个键值对。 - 键值对处理:对每个键值对,使用
split('=')将其分割为键和值。 - 解码:使用
decodeURIComponent对键和值进行解码,以处理 URL 编码的字符。 - 构建对象:将解码后的键值对存储到一个对象中,并返回该对象。
代码解析
if (!str) return {};:如果输入字符串为空,直接返回一个空对象。str.split('&'):将查询字符串按&分割成数组。reduce:遍历数组中的每个键值对,将其解析并存储到累加器对象acc中。decodeURIComponent:对键和值进行解码,确保 URL 编码的字符被正确解析。acc[decodeURIComponent(key)] = value ? decodeURIComponent(value) : null;:将解码后的键值对存储到对象中,如果值为空,则存储为null。
示例
console.log(parseQueryString("name=John&age=30"));
// 输出: { name: "John", age: "30" }
console.log(parseQueryString("q=JavaScript&lang=en&page=1"));
// 输出: { q: "JavaScript", lang: "en", page: "1" }
console.log(parseQueryString(""));
// 输出: {}