Rumah > hujung hadapan web > tutorial js > Ekstrak Parameter URL Bersarang dengan Cekap dengan Logik Rekursif dalam JavaScript

Ekstrak Parameter URL Bersarang dengan Cekap dengan Logik Rekursif dalam JavaScript

Patricia Arquette
Lepaskan: 2024-12-30 11:34:14
asal
644 orang telah melayarinya

Efficiently Extract Nested URL Parameters with Recursive Logic in JavaScript

Senario

Ekstrak nilai parameter carian sasaran (mis., id) daripada URL bersarang dalam bahagian URL, menggunakan kunci parameter carian yang diberikan (mis., daripada).

Sebagai contoh, untuk URL /main?from=/details?from=/more?id=456, fungsi getNestedSearchParamValue mengekstrak URL bersarang dengan mencari parameter carian daripada.

...

const nestedUrl = new URL(urlPart, dummyUrl);

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

...
Salin selepas log masuk

Pertama, URL bersarang /details?from=/more?id=456 diekstrak. Memandangkan URL mengandungi parameter lain daripada carian, fungsi getNestedSearchParamValue memanggil dirinya sendiri, menghantar URL yang diekstrak /details?from=/more?id=456 sebagai urlPart, bersama-sama dengan nestedParamKey (dari) dan targetParamKey (id) yang sama.

...

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

...
Salin selepas log masuk

Dalam panggilan rekursif pertama, nestedUrlPart menjadi /more?id=456. Oleh kerana URL ini tidak mengandungi parameter carian daripada (nestedParamKey), ini menunjukkan bahawa ini ialah URL sasaran untuk mencari parameter id (targetParamKey). Oleh itu, ekstrak nilai id parameter carian daripada bahagian url ini.

...

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

...
Salin selepas log masuk

Fungsi

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);
    }
}
Salin selepas log masuk

Penggunaan

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

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

Output

[LOG]: "456" 
Salin selepas log masuk

Alternatif: gunakan URLSearchParams

Dengan fungsi pembantu getUrlPartSearchParams

const queryDelimiter = "?";

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

Fungsi getNestedSearchParamValue menjadi

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;
    }
}
Salin selepas log masuk

Sumber

  • 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

Atas ialah kandungan terperinci Ekstrak Parameter URL Bersarang dengan Cekap dengan Logik Rekursif dalam JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan