Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Cekap Mengakses Sifat Objek JavaScript Bersarang Menggunakan Rentetan Notasi Titik?

Bagaimana untuk Cekap Mengakses Sifat Objek JavaScript Bersarang Menggunakan Rentetan Notasi Titik?

Susan Sarandon
Susan Sarandonasal
2024-11-30 10:02:11642semak imbas

How to Efficiently Access Nested JavaScript Object Properties Using Dot Notation Strings?

Mengakses Sifat Anak Objek dengan Rentetan Notasi Titik

Dalam JavaScript, terdapat pelbagai cara untuk mengakses sifat objek. Walau bagaimanapun, mengakses sifat bersarang dengan laluan rentetan boleh menjadi satu cabaran.

Memandangkan objek seperti:

var r = { a:1, b: { b1:11, b2: 99}};

Pertimbangkan senario di mana anda ingin mengakses nilai 99 dengan menentukan rentetan laluan var s = "b.b2". Walaupun kaedah tradisional seperti r.b.b2 atau r['b']['b2'] berfungsi, anda mungkin lebih suka menggunakan tatatanda yang lebih ringkas.

Penyelesaian Naif tetapi Cekap

function getDescendantProp(obj, desc) {
    var arr = desc.split(".");
    while(arr.length && (obj = obj[arr.shift()]));
    return obj;
}

Fungsi ini secara berulang membelah rentetan pada titik dan menavigasi struktur objek, akhirnya mengembalikan sifat yang diminta.

Contoh Penggunaan

console.log(getDescendantProp(r, "b.b2"));
//-> 99

Sambungan

Fungsi yang disediakan hanya menyokong mengakses sifat objek bersarang. Untuk penggunaan yang lebih maju, anda boleh mengubah suainya untuk mengendalikan indeks tatasusunan juga:

function advancedGetDescendantProp(obj, desc) {
    var arr = desc.split(".");
    while(arr.length) {
        let key = arr.shift();
        if (isNaN(key)) {
            obj = obj[key];
        } else {
            obj = obj[parseInt(key)];
        }
        if (!obj) return undefined;
    }
    return obj;
}

Atas ialah kandungan terperinci Bagaimana untuk Cekap Mengakses Sifat Objek JavaScript Bersarang Menggunakan Rentetan Notasi Titik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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