> 웹 프론트엔드 > JS 튜토리얼 > JavaScript의 재귀 논리를 사용하여 중첩된 URL 매개변수를 효율적으로 추출

JavaScript의 재귀 논리를 사용하여 중첩된 URL 매개변수를 효율적으로 추출

Patricia Arquette
풀어 주다: 2024-12-30 11:34:14
원래의
644명이 탐색했습니다.

Efficiently Extract Nested URL Parameters with Recursive Logic in JavaScript

대본

주어진 검색 매개변수 키(예: from)를 사용하여 URL 부분 내의 중첩된 URL에서 대상 검색 매개변수(예: id)의 값을 추출합니다.

예를 들어 URL /main?from=/details?from=/more?id=456의 경우 getNestedSearchParamValue 함수는 from에서 검색 매개변수를 찾아 중첩된 URL을 추출합니다.

...

const nestedUrl = new URL(urlPart, dummyUrl);

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

...
로그인 후 복사

먼저 중첩된 URL /details?from=/more?id=456이 추출됩니다. URL에 다른 검색 매개변수가 포함되어 있으므로 getNestedSearchParamValue 함수는 자체 호출하여 추출된 URL /details?from=/more?id=456을 동일한 NestedParamKey(from) 및 targetParamKey(id)와 함께 urlPart로 전달합니다.

...

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

...
로그인 후 복사

첫 번째 재귀 호출에서nestedUrlPart는 /more?id=456이 됩니다. 이 URL에는 (nestedParamKey)의 검색 매개변수가 포함되어 있지 않기 때문에 이것이 id 매개변수(targetParamKey)를 검색하기 위한 대상 URL임을 나타냅니다. 따라서 이 url 부분에서 검색 매개변수 id 값을 추출하세요.

...

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

...
로그인 후 복사

기능

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);
    }
}
로그인 후 복사

사용방법

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

const value = getNestedSearchParamValue(url, "from", "id");
console.log(value);
로그인 후 복사

출력

[LOG]: "456" 
로그인 후 복사

대안: URLSearchParams 사용

도우미 함수 getUrlPartSearchParams 사용

const queryDelimiter = "?";

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

getNestedSearchParamValue 함수는 다음과 같습니다

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

위 내용은 JavaScript의 재귀 논리를 사용하여 중첩된 URL 매개변수를 효율적으로 추출의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿