Heim >Web-Frontend >js-Tutorial >Extrahieren Sie verschachtelte URL-Parameter effizient mit rekursiver Logik in JavaScript

Extrahieren Sie verschachtelte URL-Parameter effizient mit rekursiver Logik in JavaScript

Patricia Arquette
Patricia ArquetteOriginal
2024-12-30 11:34:14647Durchsuche

Efficiently Extract Nested URL Parameters with Recursive Logic in JavaScript

Szenario

Extrahieren Sie den Wert eines Zielsuchparameters (z. B. id) aus einer verschachtelten URL innerhalb eines URL-Teils unter Verwendung eines bestimmten Suchparameterschlüssels (z. B. von).

Zum Beispiel extrahiert die Funktion getNestedSearchParamValue für die URL /main?from=/details?from=/more?id=456 die verschachtelte URL, indem sie nach dem Suchparameter von sucht.

...

const nestedUrl = new URL(urlPart, dummyUrl);

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

...

Zuerst wird die verschachtelte URL /details?from=/more?id=456 extrahiert. Da die URL einen weiteren from-Suchparameter enthält, ruft sich die Funktion getNestedSearchParamValue selbst auf und übergibt die extrahierte URL /details?from=/more?id=456 als urlPart zusammen mit demselben nestedParamKey (from) und targetParamKey (id).

...

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

...

Im ersten rekursiven Aufruf wird der nestedUrlPart zu /more?id=456. Da diese URL den Suchparameter from (den nestedParamKey) nicht enthält, weist sie darauf hin, dass dies die Ziel-URL für die Suche nach dem ID-Parameter (dem targetParamKey) ist. Extrahieren Sie daher den Wert der Suchparameter-ID aus diesem URL-Teil.

...

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

...

Funktion

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);
    }
}

Verwendung

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

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

Ausgabe

[LOG]: "456" 

Alternative: URLSearchParams verwenden

Mit einer Hilfsfunktion getUrlPartSearchParams

const queryDelimiter = "?";

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

Funktion getNestedSearchParamValue wird zu

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;
    }
}

Ressourcen

  • 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

Das obige ist der detaillierte Inhalt vonExtrahieren Sie verschachtelte URL-Parameter effizient mit rekursiver Logik in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn