測試巢狀JavaScript 物件鍵的存在
驗證巢狀JavaScript 物件中的屬性是否存在是一個挑戰,尤其是在面臨潛在的問題時null 或未定義的值。為了解決這個問題,請考慮採用逐步方法,而不是依賴有風險且容易出錯的直接屬性存取。
一個可行的解決方案涉及一個客製化的函數,該函數可以測試多個巢狀層級的存在。這個函數被優雅地命名為 checkNested,接受目標物件作為其第一個參數,後面跟著一系列預期的嵌套屬性名稱。它有系統地檢查每個屬性是否存在,如果找到所有屬性,則傳回 true,否則傳回 false。
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; }
例如,給定物件:
var test = { level1: { level2: { level3: 'level3', }, }, };
使用預期呼叫checkNested level 傳回預期結果:
checkNested(test, 'level1', 'level2', 'level3'); // true checkNested(test, 'level1', 'level2', 'foo'); // false
ES6666>
利用ES6特性可以進一步簡化此功能,從而實現簡潔高效的實現。遞歸和尾部調用優化相結合,創建了一個簡潔而強大的解決方案:function checkNested(obj, level, ...rest) { if (obj === undefined) return false; if (rest.length == 0 && obj.hasOwnProperty(level)) return true; return checkNested(obj[level], ...rest); }
function getNested(obj, ...args) { return args.reduce((obj, level) => obj && obj[level], obj); } const test = { level1: { level2: { level3: 'level3', }, }, }; console.log(getNested(test, 'level1', 'level2', 'level3')); // 'level3' console.log(getNested(test, 'level1', 'level2', 'level3', 'length')); // 6 console.log(getNested(test, 'level1', 'level2', 'foo')); // undefined console.log(getNested(test, 'a', 'b')); // undefined
以上是如何安全地檢查 JavaScript 物件中是否存在嵌套鍵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!