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

如何有效率地檢查嵌套 JavaScript 物件鍵是否存在?

Linda Hamilton
Linda Hamilton原創
2024-12-19 09:17:10143瀏覽

How to Efficiently Check for Nested JavaScript Object Key Existence?

巢狀 JavaScript 物件鍵存在測試

辨識深層嵌套物件屬性的存在可能是一個挑戰。當嘗試使用點表示法存取多級鍵時,如果任何中間等級未定義或為空,則可能會發生錯誤。

現有方法:

一種常見方法是使用條件語句手動檢查巢狀物件的每個級別,確保在存取所需的鍵之前每個級別都存在。但是,對於深度嵌套的對象,此方法可能會變得乏味且容易出錯。

更好的選擇:

更強大的解決方案是建立一個函數來遞歸地檢查巢狀鍵的存在。此函數將物件和一系列級別名稱作為參數,並迭代每個級別,驗證其是否存在以及其值是否未定義或為 null。

函數實作:

這是一個逐步的函數實作:

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;
}

如果所有指定的等級此函數傳回true

ES6 更新:

在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)
}

範例用法:

var test = {level1:{level2:{level3:'level3'}} };

checkNested(test, 'level1', 'level2', 'level3'); // true
checkNested(test, 'level1', 'level2', 'foo'); // false

值檢索(ES6):

此外,要擷取巢狀屬性的值,下列單行函數可以使用:

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

範例:

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

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

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