Maison > interface Web > js tutoriel > Comment vérifier efficacement l'existence de clés d'objet JavaScript imbriquées ?

Comment vérifier efficacement l'existence de clés d'objet JavaScript imbriquées ?

Linda Hamilton
Libérer: 2024-12-19 09:17:10
original
156 Les gens l'ont consulté

How to Efficiently Check for Nested JavaScript Object Key Existence?

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

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

Exemple d'utilisation :

var test = {level1:{level2:{level3:'level3'}} };

checkNested(test, 'level1', 'level2', 'level3'); // true
checkNested(test, 'level1', 'level2', 'foo'); // false
Copier après la connexion

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

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