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
Libérer: 2024-12-20 17:43:09
original
311 Les gens l'ont consulté

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);
}
Copier après la connexion

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;
}
Copier après la connexion

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
Copier après la connexion

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)
}
Copier après la connexion

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)
}
Copier après la connexion

Par exemple :

console.log(getNested(test, 'level1', 'level2', 'level3')); // 'level3'
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal