Maison >interface Web >js tutoriel >Comment puis-je vérifier de manière robuste l'existence de clés imbriquées dans les objets JavaScript ?
Lorsque vous traitez des objets JavaScript complexes avec des propriétés imbriquées, déterminer l'existence d'une clé imbriquée peut être difficile. Ce qui suit fournit une exploration approfondie des meilleures pratiques pour tester l'existence de clés d'objet imbriqués.
L'approche traditionnelle, comme le démontre la question, consiste à vérifier chaque niveau de l'objet imbriqué de manière séquentielle :
if (test.level1 && test.level1.level2 && test.level1.level2.level3) { alert(test.level1.level2.level3); }
Cependant, cette approche est sujette à des exceptions lorsque des propriétés inexistantes sont rencontrées.
Solution : Existence itérative Checker
Pour une robustesse améliorée, une solution plus adaptée consiste à créer une fonction qui vérifie de manière itérative l'existence de propriétés imbriquées sans déclencher d'exceptions :
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; }
Cette fonction prend un nombre quelconque de noms de propriété comme arguments et renvoie vrai si tous existent dans l’objet imbriqué. Par exemple :
var test = {level1:{level2:{level3:'level3'}} }; checkNested(test, 'level1', 'level2', 'level3'); // true checkNested(test, 'level1', 'level2', 'foo'); // false
Solutions ES6
ES6 offre des options plus concises et élégantes pour la vérification de l'existence :
1. Fonction récursive de queue :
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. Fonction basée sur la réduction :
Pour récupérer la valeur d'une propriété imbriquée, vous pouvez utiliser cette fonction sur une ligne :
function getNested(obj, ...args) { return args.reduce((obj, level) => obj && obj[level], obj) }
Par exemple :
console.log(getNested(test, 'level1', 'level2', 'level3')); // 'level3'
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!