Verschachtelter JavaScript-Objektschlüsselexistenztest
Das Identifizieren der Existenz tief verschachtelter Objekteigenschaften kann eine Herausforderung sein. Beim Versuch, die Punktnotation für den Zugriff auf einen mehrstufigen Schlüssel zu verwenden, können Fehler auftreten, wenn eine Zwischenebene undefiniert oder null ist.
Bestehender Ansatz:
Ein gängiger Ansatz besteht darin, mithilfe von Bedingungsanweisungen manuell jede Ebene des verschachtelten Objekts zu überprüfen und sicherzustellen, dass jede Ebene vorhanden ist, bevor auf den gewünschten Schlüssel zugegriffen wird. Allerdings kann diese Methode bei tief verschachtelten Objekten mühsam und fehleranfällig werden.
Bessere Option:
Eine robustere Lösung besteht darin, eine Funktion zu erstellen, die das rekursiv überprüft Existenz verschachtelter Schlüssel. Die Funktion verwendet das Objekt und eine Reihe von Ebenennamen als Argumente und durchläuft jede Ebene, wobei sie überprüft, ob sie existiert und ihr Wert nicht undefiniert oder null ist.
Funktionsimplementierung:
Hier ist eine Schritt-für-Schritt-Funktionsimplementierung:
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; }
Diese Funktion gibt „true“ zurück, wenn alle angegebenen Ebenen vorhanden sind, und „false“. andernfalls.
ES6-Update:
In ES6 ist eine prägnantere Version dieser Funktion mithilfe von Rekursion und Tail-Call-Optimierung möglich:
function checkNested(obj, level, ...rest) { if (obj === undefined) return false if (rest.length == 0 && obj.hasOwnProperty(level)) return true return checkNested(obj[level], ...rest) }
Beispielverwendung:
var test = {level1:{level2:{level3:'level3'}} }; checkNested(test, 'level1', 'level2', 'level3'); // true checkNested(test, 'level1', 'level2', 'foo'); // false
Wert Abruf (ES6):
Zusätzlich kann zum Abrufen des Werts einer verschachtelten Eigenschaft die folgende einzeilige Funktion verwendet werden:
function getNested(obj, ...args) { return args.reduce((obj, level) => obj && obj[level], obj) }
Beispiel:
console.log(getNested(test, 'level1', 'level2', 'level3')); // 'level3'
Das obige ist der detaillierte Inhalt vonWie kann man effizient prüfen, ob ein verschachtelter JavaScript-Objektschlüssel vorhanden ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!