Test d'existence de clés d'objet JavaScript imbriquées
Identifier l'existence de propriétés d'objet profondément imbriquées peut être un défi. Lorsque vous tentez d'utiliser la notation par points pour accéder à une clé à plusieurs niveaux, des erreurs peuvent se produire si un niveau intermédiaire est indéfini ou nul.
Approche existante :
Une approche courante consiste à vérifier manuellement chaque niveau de l'objet imbriqué à l'aide d'instructions conditionnelles, en s'assurant que chaque niveau existe avant d'accéder à la clé souhaitée. Cependant, cette méthode peut devenir fastidieuse et sujette aux erreurs pour les objets profondément imbriqués.
Meilleure option :
Une solution plus robuste consiste à créer une fonction qui vérifie de manière récursive le existence de clés imbriquées. La fonction prend l'objet et une série de noms de niveaux comme arguments et parcourt chaque niveau, vérifiant s'il existe et si sa valeur n'est pas indéfinie ou nulle.
Implémentation de la fonction :
Voici une implémentation de fonction étape par étape :
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; }
Cette fonction renvoie vrai si tous les niveaux spécifiés existent et faux sinon.
Mise à jour ES6 :
Dans ES6, une version plus concise de cette fonction est possible en utilisant la récursivité et l'optimisation des appels 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) }
Exemple d'utilisation :
var test = {level1:{level2:{level3:'level3'}} }; checkNested(test, 'level1', 'level2', 'level3'); // true checkNested(test, 'level1', 'level2', 'foo'); // false
Récupération de valeur (ES6) :
De plus, pour récupérer la valeur d'une propriété imbriquée, la fonction sur une ligne suivante peut être utilisée :
function getNested(obj, ...args) { return args.reduce((obj, level) => obj && obj[level], obj) }
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!