首頁 >web前端 >js教程 >如何可靠地檢查 JavaScript 物件中是否存在嵌套鍵?

如何可靠地檢查 JavaScript 物件中是否存在嵌套鍵?

Linda Hamilton
Linda Hamilton原創
2024-12-20 17:43:09311瀏覽

How Can I Robustly Check for Nested Key Existence in JavaScript Objects?

測試巢狀 JavaScript 物件鍵是否存在

處理具有巢狀屬性的複雜 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 &amp;&amp; obj.hasOwnProperty(level)) return true
  return checkNested(obj[level], ...rest)
}

2.基於Re duce的函數:

要檢索巢狀屬性的值,可以使用此單行函數:

function getNested(obj, ...args) {
  return args.reduce((obj, level) => obj &amp;&amp; obj[level], obj)
}

例如:

console.log(getNested(test, 'level1', 'level2', 'level3')); // 'level3'

以上是如何可靠地檢查 JavaScript 物件中是否存在嵌套鍵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn