在 JavaScript 中使用递归逻辑高效提取嵌套 URL 参数

在 javascript 中使用递归逻辑高效提取嵌套 url 参数

问题描述: 从嵌套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免费学习笔记(深入)”;

凹凸工坊-AI手写模拟器 凹凸工坊-AI手写模拟器

AI手写模拟器,一键生成手写文稿

凹凸工坊-AI手写模拟器 500 查看详情 凹凸工坊-AI手写模拟器

此方法改进了解析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内置的URLURLSearchParams对象,保证了代码的效率和可靠性。

参考资源:

URLURLSearchParams

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 参数的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/893416.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月28日 16:05:14
下一篇 2025年11月28日 16:05:38

相关推荐

  • Go语言中声明和初始化接口数组的指南

    本文旨在详细指导如何在go语言中正确声明和初始化interface{}数组。我们将解析常见的语法错误,即尝试在接口类型声明中直接列出值,并提供使用复合字面量进行数组初始化的正确方法,通过示例代码和最佳实践,帮助开发者避免此类问题并有效处理异构数据。 理解Go语言中的接口数组 在Go语言中,inter…

    2025年12月16日
    000
  • Go语言并发UDP通信:解决读写竞态条件与net.UDPAddr复用问题

    go语言中并发处理udp连接的读写操作时,可能会因`net.udpaddr`结构体的复用而引发竞态条件。本文将深入分析这一问题,解释竞态检测器发出的警告,并提供一种通过深度复制`net.udpaddr`来消除数据竞争的优雅解决方案,确保udp通信的并发安全与高效。 引言:Go语言中的并发UDP通信挑…

    2025年12月16日
    000
  • Golang如何使用context控制请求超时_Golang Web请求超时控制方法

    使用context控制超时是Go中保障HTTP服务稳定的关键。通过context.WithTimeout创建带时限的上下文并传递给HTTP请求,可避免因后端延迟导致资源耗尽。示例中向延迟2秒的接口发起请求,但设置500毫秒超时,最终请求中断并返回“context deadline exceeded”…

    2025年12月16日
    000
  • 如何在Golang中实现微服务部署回滚_Golang 微服务部署回滚方法

    回滚需快速安全恢复稳定版本,Golang微服务依赖部署架构实现。1. 用Docker镜像标签+编排工具回滚;2. 利用Kubernetes Deployment版本管理一键回滚;3. 蓝绿部署通过流量切换秒级恢复;4. CI/CD流水线结合健康检查自动回滚。关键在于版本可追踪、变更可逆、恢复够快。 …

    2025年12月16日
    000
  • Golang如何使用模板方法设计处理流程_Golang 模板方法处理实践

    模板方法模式通过接口与组合在Go中实现,定义算法骨架并延迟步骤实现。例如数据处理流程:加载→验证→处理→保存,使用Loader、Validator、Handler、Saver接口构建DataProcessor,Process方法为模板,各步骤由具体实现注入,如FileLoader读文件、JsonVa…

    2025年12月16日
    000
  • Golang如何使用 time 处理时间与日期_Golang time 包时间操作与格式化

    Go语言通过time包提供时间处理功能,使用time.Now()获取当前时间;格式化与解析基于“2006-01-02 15:04:05”模板;支持Add、Sub等时间计算;通过LoadLocation处理时区;time.Sleep实现休眠,time.After用于超时控制。 Go语言通过内置的tim…

    2025年12月16日
    000
  • Golang 如何构建一个图像缩略图生成服务_Golang 图像处理项目讲解

    使用Go构建图像缩略图服务需结合标准库与第三方包,通过net/http接收参数,利用resize库高质量缩放,支持远程图像下载、格式自动识别与JPEG编码输出,同时需设计缓存、限流、超时控制等机制提升性能与安全性,适用于高并发场景。 构建一个图像缩略图生成服务是 Golang 图像处理的典型应用场景…

    2025年12月16日
    000
  • Go语言中实现HTTP Basic Auth的惯用方法

    本教程详细介绍了如何在go语言中为rest api实现http basic auth,特别强调了使用`subtle.constanttimecompare`进行安全比较以防范时序攻击。文章提供了一个可复用的中间件函数,并演示了如何将其应用于特定的路由,同时讨论了安全考量和潜在的优化方案,帮助开发者以…

    2025年12月16日
    000
  • Golang如何实现动态路由注册

    Go语言中实现动态路由注册的核心是使用HTTP多路复用器结合配置或反射机制。1. 可通过map存储路径与处理函数实现简单动态路由,适用于小型项目但不支持参数;2. 使用gorilla/mux库可注册带路径参数的路由,如/api/{version}/users/{id},并通过mux.Vars提取参数…

    2025年12月16日
    000
  • Go语言中高效接收完整UDP数据报的实践指南

    在go语言中处理udp数据报时,标准读取方法可能因固定缓冲区大小导致数据截断或内存浪费。本文将深入探讨如何利用`net.udpconn.readfromudp`函数,在不预先分配最大64kb缓冲区的情况下,准确获取并处理udp数据报的实际大小,从而实现高效、健壮的udp通信。 引言:Go语言UDP数…

    2025年12月16日
    000
  • Go 命令行应用程序的结构、构建与部署实践

    本文旨在详细阐述go语言命令行接口(cli)程序的标准结构、如何通过`go build`命令将源代码编译为可执行文件,以及如何配置系统环境使其能像原生命令一样直接运行。我们将探讨包组织、构建流程和部署策略,帮助开发者高效构建和管理go cli应用。 1. Go CLI 程序的结构组织 一个典型的Go…

    2025年12月16日
    000
  • 如何用Golang优化I/O密集型程序_Golang I/O密集型性能优化实践

    合理控制并发、复用连接、优化缓冲和设置超时是提升Go程序I/O性能的关键:1. 使用带缓冲channel限制goroutine数量,避免资源耗尽;2. 自定义http.Transport参数以复用TCP连接,减少握手开销;3. 利用bufio.Writer批量写入,降低系统调用频率;4. 通过con…

    2025年12月16日
    000
  • Go语言中实现HTTP Basic Auth的惯用方法与路由保护实践

    本文详细介绍了在go语言中为rest api的特定路由实现http basic authentication的惯用方法。通过构建一个可复用的中间件函数,演示了如何安全地校验用户凭证,处理未经授权的请求,并利用`subtle.constanttimecompare`函数增强安全性。文章提供了完整的代码…

    2025年12月16日
    000
  • Go语言中并发HTTP请求列表的优雅实现

    本文深入探讨了在go语言中如何高效且异步地获取url列表。通过利用go的goroutine和channel并发原语,我们构建了一个健壮的http请求处理机制。文章提供了一个完整的代码示例,详细展示了如何为每个url启动独立协程、如何通过channel收集结果、如何优雅地处理单个请求错误以及如何设置全…

    2025年12月16日
    000
  • Go语言Web服务集成Redis:Redigo连接池最佳实践

    本文深入探讨了在go语言web服务中如何高效、稳定地集成redis,并着重解决了因频繁创建和关闭redis连接导致的资源耗尽问题。通过详细介绍`redigo`库提供的连接池(`redis.pool`)机制,文章将指导读者如何在应用启动时初始化连接池,并在请求处理过程中安全、复用式地获取和释放redi…

    2025年12月16日
    000
  • Go语言命令行工具的构建与可执行文件生成实践

    本文旨在指导开发者如何将go语言项目构建为可直接运行的命令行工具。我们将探讨go程序包结构,并详细介绍如何使用`go build`和`go install`命令生成可执行文件,使其能够像系统命令一样被调用,并有效处理命令行参数。通过优化构建流程,实现便捷的程序部署与执行。 1. Go项目结构概述 在…

    2025年12月16日
    000
  • Go语言P2P网络实现:入门指南与核心优势

    本文旨在为使用go语言实现点对点(p2p)网络提供入门指导。我们将探讨go语言在构建p2p网络时的显著优势,特别是其并发原语goroutine和channel如何简化异步网络事件处理。文章将推荐权威的学习资源,并概述实现p2p网络的关键步骤与考量,帮助开发者高效构建健壮的分布式系统。 引言:Go语言…

    2025年12月16日
    000
  • Go语言中命名嵌套函数的限制:设计考量与替代方案

    go语言有意禁止在函数内部声明命名函数,但允许使用匿名函数(闭包)。这一设计决策旨在简化编译器实现、有效避免潜在的编程错误,并明确区分普通函数与可能涉及环境捕获的闭包,从而提升代码的可读性、可维护性及整体语言的健壮性。 引言:Go语言中的函数声明行为 Go语言作为一门现代编程语言,在函数定义和使用上…

    2025年12月16日
    000
  • Go语言中将HTTP请求体中的JSON数组反序列化为结构体切片

    本教程详细介绍了在go语言中如何将http请求体中包含的json数组反序列化为go结构体切片。我们将探讨如何使用`encoding/json`包的`unmarshal`函数,结合自定义结构体和`json`标签,高效、安全地处理传入的json数据,实现从原始字节数据到go类型数据的转换,并提供完整的代…

    2025年12月16日
    000
  • Go语言中基于Channel的队列管理与超时机制

    本文探讨了在go语言中使用channel作为队列时,如何有效管理并发操作和避免资源阻塞。针对channel未关闭和可能出现的“不活跃”状态,文章提出并详细阐述了通过`select`语句结合`time.after`实现读写操作的超时机制,以确保goroutine能够及时响应或优雅退出,从而提升系统的健…

    2025年12月16日
    000

发表回复

登录后才能评论
关注微信