推荐答案
-- -------------------- ---- ------- -------- --------------------- - -- ------ ------ --- ------ --------------------------- ----- -- - ----- ----- ------ - ---------------- -- ----- - ---------------------------- - ----- - ------------------------- - ----- - ------ ---- -- ---- -
本题详细解读
题目要求
实现一个函数 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("")); // 输出: {}