问题描述: 从嵌套URL中提取特定参数值。例如,从URL /main?from=/details?from=/more?id=456 中提取参数 id 的值。
方法一:递归函数
该方法使用递归函数 getnestedsearchparamvalue 来逐层解析嵌套的 URL。 函数接收 URL 片段、嵌套参数键和目标参数键作为输入。如果找到嵌套参数,则递归调用自身;否则,提取目标参数的值并返回。
const dummyurl = "http://localhost"; function getnestedsearchparamvalue(urlpart, nestedparamkey, targetparamkey) { const nestedurl = new URL(urlpart, dummyurl); const nestedurlpart = nestedurl.searchParams.get(nestedparamkey) || ""; if (!nestedurlpart) { return null; } if (nestedurlpart.includes(nestedparamkey)) { return getnestedsearchparamvalue(nestedurlpart, nestedparamkey, targetparamkey); } else { const targeturl = new URL(nestedurlpart, dummyurl); return targeturl.searchParams.get(targetparamkey); } } const url = "/main?from=/details?from=/more?id=456"; const value = getnestedsearchparamvalue(url, "from", "id"); console.log(value); // 输出: 456
登录后复制
方法二:使用 URLSearchParams 辅助函数
立即学习“Java免费学习笔记(深入)”;
此方法改进了解析URL片段的方式,使用辅助函数 geturlpartsearchparams 来处理 URLSearchParams 对象,从而简化代码并提高可读性。
const querydelimiter = "?"; function geturlpartsearchparams(urlpart) { const [, ...query] = urlpart.split(querydelimiter); const querystr = query.join(querydelimiter); return new URLSearchParams(querystr); } function getNestedSearchParamValue(urlPart, nestedParamKey, targetParamKey) { let searchParams = geturlpartsearchparams(urlPart); const nestedUrlPart = searchParams?.get(nestedParamKey); if (!nestedUrlPart) { return null; } if (nestedUrlPart.includes(nestedParamKey)) { return getNestedSearchParamValue(nestedUrlPart, nestedParamKey, targetParamKey); } else { searchParams = geturlpartsearchparams(nestedUrlPart); return searchParams?.get(targetParamKey) || null; } } const url2 = "/main?from=/details?from=/more?id=456"; const value2 = getNestedSearchParamValue(url2, "from", "id"); console.log(value2); // 输出: 456
登录后复制
两种方法的比较: 方法二通过引入辅助函数,使代码结构更清晰,可维护性更好。 两种方法都利用了JavaScript内置的URL和URLSearchParams对象,保证了代码的效率和可靠性。
参考资源:
- URL
- URLSearchParams
This revised response provides a more concise and well-structured explanation, focusing on the core logic and improvements of the second method. It also includes complete, runnable code snippets for both methods.
以上就是在 JavaScript 中使用递归逻辑高效提取嵌套 URL 参数的详细内容,更多请关注抖狐科技其它相关文章!
-
如何使用 Python 生成指定范围内指定数量的随机浮点数?
如何在 python 中生成指定范围的指定数量随机浮点数? 在 python 中,借助 numpy 库可以轻松生成指定范围的指定数量的随机浮点数。numpy 是一个用于科学计算的强大库。 使用 num...
-
steam手机版登陆验证码怎么输都不对
steam手机版登陆验证码错误可能是由网络问题、时间设置错误、验证码输入错误、验证码过期、服务器问题、手机号码问题或安全设置问题引起的。请检查网络连接、时间设置、验证码输入、请求新验证码,稍后再试或联...
-
方舟生存进化霸王龙困龙房
在“方舟生存进化”中训练巨龙的前提是抓住巨龙。玩家需要建造一个昏昏欲睡的龙屋来捕捉这些生物,但是如何建造一个简单而有用的昏昏欲睡的龙屋呢??请看下面的《方舟生存进化》简单实用困龙房建造教程,希望对大家...
-
笔记本的显卡在哪里找
笔记本的显卡通常位于机身内部无法直接查看。查找方法包括:通过设备管理器查看显卡名称;使用 directx 诊断工具在“显示”选项卡下查看显卡信息;在系统信息中展开“显示”查看显卡详细信息;下载 gpu...
-
英雄联盟佛耶戈带什么符文
英雄联盟佛耶戈的符文选择是玩家们在游戏中取得胜利的关键因素。php小编新一针对这一问题进行了深入的分析和整理,为大家带来详尽的英雄联盟佛耶戈符文搭配指南。希望通过以下内容,帮助大家更好地了解佛耶戈的符...