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 ?

Comment puis-je vérifier de manière robuste l'existence de clés imbriquées dans les objets JavaScript ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-20 17:43:09310parcourir

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

Test de l'existence d'une clé d'objet JavaScript imbriquée

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 &amp;&amp; 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 &amp;&amp; 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn