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

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

Patricia Arquette
發布: 2024-12-20 06:29:13
原創
447 人瀏覽過

How Can I Safely Check for the Existence of Nested Keys in JavaScript Objects?

測試巢狀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 物件的複雜性,確保您的程式的穩健性和可靠性程式碼。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板