Ujian Kewujudan Kunci Objek JavaScript Bersarang
Mengenal pasti kewujudan sifat objek bersarang dalam boleh menjadi satu cabaran. Apabila cuba menggunakan tatatanda titik untuk mengakses kunci berbilang peringkat, ralat boleh berlaku jika mana-mana tahap perantaraan tidak ditentukan atau batal.
Pendekatan Sedia Ada:
Satu pendekatan biasa adalah untuk menyemak secara manual bagi setiap tahap objek bersarang menggunakan pernyataan bersyarat, memastikan setiap tahap wujud sebelum mengakses kekunci yang dikehendaki. Walau bagaimanapun, kaedah ini boleh menjadi membosankan dan terdedah kepada ralat untuk objek bersarang dalam.
Pilihan yang Lebih Baik:
Penyelesaian yang lebih mantap ialah mencipta fungsi yang menyemak secara rekursif kewujudan kunci bersarang. Fungsi mengambil objek dan satu siri nama peringkat sebagai argumen dan berulang melalui setiap peringkat, mengesahkan sama ada ia wujud dan nilainya tidak tidak ditentukan atau batal.
Pelaksanaan Fungsi:
Berikut ialah pelaksanaan fungsi langkah demi langkah:
function checkNested(obj /*, level1, level2, ... levelN*/) { var args = Array.prototype.slice.call(arguments, 1); for (var i = 0; i < args.length; i++) { if (!obj || !obj.hasOwnProperty(args[i])) { return false; } obj = obj[args[i]]; } return true; }
Fungsi ini kembali benar jika semua tahap yang dinyatakan wujud dan palsu sebaliknya.
Kemas Kini ES6:
Dalam ES6, versi yang lebih ringkas bagi fungsi ini boleh dilakukan menggunakan rekursi dan pengoptimuman panggilan ekor:
function checkNested(obj, level, ...rest) { if (obj === undefined) return false if (rest.length == 0 && obj.hasOwnProperty(level)) return true return checkNested(obj[level], ...rest) }
Contoh Penggunaan:
var test = {level1:{level2:{level3:'level3'}} }; checkNested(test, 'level1', 'level2', 'level3'); // true checkNested(test, 'level1', 'level2', 'foo'); // false
Pendapatan Nilai (ES6):
Selain itu, untuk mendapatkan semula nilai harta bersarang, fungsi satu baris berikut boleh jadilah digunakan:
function getNested(obj, ...args) { return args.reduce((obj, level) => obj && obj[level], obj) }
Contoh:
console.log(getNested(test, 'level1', 'level2', 'level3')); // 'level3'
Atas ialah kandungan terperinci Bagaimana untuk Memeriksa Kewujudan Utama Objek JavaScript Bersarang dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!