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
Freigeben: 2024-12-30 11:34:14
Original
741 Leute haben es durchsucht

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) ?? "";

...
Nach dem Login kopieren

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

...
Nach dem Login kopieren

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

...
Nach dem Login kopieren

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);
    }
}
Nach dem Login kopieren

Verwendung

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

const value = getNestedSearchParamValue(url, "from", "id");
console.log(value);
Nach dem Login kopieren

Ausgabe

[LOG]: "456" 
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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;
    }
}
Nach dem Login kopieren

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!

Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage