Heim >Web-Frontend >js-Tutorial >Wie kann ich zuverlässig prüfen, ob in JavaScript-Objekten verschachtelte Schlüssel vorhanden sind?
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 && 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 && 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!