Heim >Web-Frontend >js-Tutorial >Wie kann ich zuverlässig prüfen, ob in JavaScript-Objekten verschachtelte Schlüssel vorhanden sind?

Wie kann ich zuverlässig prüfen, ob in JavaScript-Objekten verschachtelte Schlüssel vorhanden sind?

Linda Hamilton
Linda HamiltonOriginal
2024-12-20 17:43:09311Durchsuche

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

Testen auf das Vorhandensein verschachtelter JavaScript-Objektschlüssel

Beim Umgang mit komplexen JavaScript-Objekten mit verschachtelten Eigenschaften kann es schwierig sein, das Vorhandensein eines verschachtelten Schlüssels zu ermitteln. Im Folgenden finden Sie eine ausführliche Untersuchung der Best Practices zum Testen der Existenz verschachtelter Objektschlüssel.

Der traditionelle Ansatz besteht, wie in der Frage gezeigt, darin, jede Ebene des verschachtelten Objekts nacheinander zu überprüfen:

if (test.level1 && test.level1.level2 && test.level1.level2.level3) {
    alert(test.level1.level2.level3);
}

Dieser Ansatz ist jedoch anfällig für Ausnahmen, wenn nicht vorhandene Eigenschaften angetroffen werden.

Lösung: Iterative Existenz Prüfer

Für eine verbesserte Robustheit besteht eine geeignetere Lösung darin, eine Funktion zu erstellen, die iterativ die Existenz verschachtelter Eigenschaften überprüft, ohne Ausnahmen auszulösen:

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

Diese Funktion akzeptiert eine beliebige Anzahl von Eigenschaftsnamen als Argumente und gibt true zurück, wenn alle davon im verschachtelten Objekt vorhanden sind. Zum Beispiel:

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

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

ES6 Solutions

ES6 bietet prägnantere und elegantere Optionen zur Existenzprüfung:

1. Schwanzrekursive Funktion:

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. Reduzierbasierte Funktion:

Um den Wert einer verschachtelten Eigenschaft abzurufen, können Sie diese einzeilige Funktion verwenden:

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

Zum Beispiel:

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

Das obige ist der detaillierte Inhalt vonWie kann ich zuverlässig prüfen, ob in JavaScript-Objekten verschachtelte Schlüssel vorhanden sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn