Home > Web Front-end > JS Tutorial > Efficiently Extract Nested URL Parameters with Recursive Logic in JavaScript

Efficiently Extract Nested URL Parameters with Recursive Logic in JavaScript

Patricia Arquette
Release: 2024-12-30 11:34:14
Original
704 people have browsed it

Efficiently Extract Nested URL Parameters with Recursive Logic in JavaScript

Scenario

Extract the value of a target search parameter (e.g., id) from a nested URL within a URL part, using a given search parameter key (e.g., from).

For example, for the URL /main?from=/details?from=/more?id=456, the function getNestedSearchParamValue extracts the nested URL by looking for the search parameter from.

...

const nestedUrl = new URL(urlPart, dummyUrl);

const nestedUrlPart = nestedUrl.searchParams.get(nestedParamKey) ?? "";

...
Copy after login

First, the nested URL /details?from=/more?id=456 is extracted. Since the URL contains another from search parameter, the getNestedSearchParamValue function calls itself, passing the extracted URL /details?from=/more?id=456 as the urlPart, along with the same nestedParamKey (from) and targetParamKey (id).

...

if(nestedUrlPart.includes(nestedParamKey)){
    return getNestedSearchParamValue(nestedUrlPart, nestedParamKey, targetParamKey);
}

...
Copy after login

In the first recursive call, the nestedUrlPart becomes /more?id=456. Because this URL does not contain the search parameter from (the nestedParamKey), it indicates that this is the target URL to search for the id parameter (the targetParamKey). Therefore, extract the value of the search parameter id from this url part.

...

else {
    const targetUrl = new URL(nestedUrlPart, dummyUrl);
    return targetUrl.searchParams.get(targetParamKey);
}

...
Copy after login

Function

const dummyUrl = "http://localhost";

function getNestedSearchParamValue(urlPart: string, nestedParamKey: string, targetParamKey: string): string | null {
    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);
    }
}
Copy after login

Usage

const url = "/main?from=/details?from=/more?id=456";

const value = getNestedSearchParamValue(url, "from", "id");
console.log(value);
Copy after login

Output

[LOG]: "456" 
Copy after login

Alternative: use URLSearchParams

With a helper function getUrlPartSearchParams

const queryDelimiter = "?";

function getUrlPartSearchParams(urlPart: string):URLSearchParams | null {
    const [_, ...query] = urlPart.split(queryDelimiter);
    const queryStr = query.join(queryDelimiter);
    return new URLSearchParams(queryStr);
}
Copy after login

Function getNestedSearchParamValue becomes

function getNestedSearchParamValue(urlPart: string, nestedParamKey: string, targetParamKey: string): string | null {
    let searchParams = getUrlPartSearchParams(urlPart);

    const nestedUrlPart = searchParams?.get(nestedParamKey);
    // console.log(nestedUrlPart)
    if(!nestedUrlPart) {
        return null;
    }
    if (nestedUrlPart.includes(nestedParamKey)) {
        return getNestedSearchParamValue(nestedUrlPart, nestedParamKey, targetParamKey);
    } else {
        searchParams = getUrlPartSearchParams(nestedUrlPart);
        return searchParams?.get(targetParamKey) ?? null;
    }
}
Copy after login

Resources

  • https://developer.mozilla.org/en-US/docs/Web/API/URL

  • https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams

  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters

  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split

  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join

The above is the detailed content of Efficiently Extract Nested URL Parameters with Recursive Logic in JavaScript. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template