處理具有巢狀屬性的複雜 JavaScript 物件時,確定巢狀鍵是否存在可能具有挑戰性。以下深入探討了測試嵌套物件鍵是否存在的最佳實務。
傳統方法,如問題中所示,是按順序檢查嵌套物件的每個層級:
if (test.level1 && test.level1.level2 && test.level1.level2.level3) { alert(test.level1.level2.level3); }
但是,當遇到不存在的屬性時,這種方法很容易出現異常。
解決方案:迭代存在檢查器
為了提高魯棒性,更合適的解決方案是創建一個函數,迭代地檢查嵌套屬性是否存在而不觸發異常:
function checkNested(obj, ...args) { for (var i = 0; i < args.length; i++) { if (!obj || !obj.hasOwnProperty(args[i])) { return false; } obj = obj[args[i]]; } return true; }
此函數接受任意數字屬性名稱作為參數,如果所有屬性名稱都存在於巢狀物件中,則傳回true。例如:
var test = {level1:{level2:{level3:'level3'}} }; checkNested(test, 'level1', 'level2', 'level3'); // true checkNested(test, 'level1', 'level2', 'foo'); // false
ES6 解
ES6提供了更簡潔、更優雅的存在檢查選項:
1.尾遞歸函數:
function checkNested(obj, level, ...rest) { if (obj === undefined) return false if (rest.length == 0 && obj.hasOwnProperty(level)) return true return checkNested(obj[level], ...rest) }
2.基於Re duce的函數:
要檢索巢狀屬性的值,可以使用此單行函數:
function getNested(obj, ...args) { return args.reduce((obj, level) => obj && obj[level], obj) }
例如:
console.log(getNested(test, 'level1', 'level2', 'level3')); // 'level3'
以上是如何可靠地檢查 JavaScript 物件中是否存在嵌套鍵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!