Heim >Web-Frontend >js-Tutorial >Extrahieren Sie verschachtelte URL-Parameter effizient mit rekursiver Logik in JavaScript
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"
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; } }
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!