Maison > interface Web > js tutoriel > Comment puis-je vérifier en toute sécurité l'existence de clés imbriquées dans les objets JavaScript ?

Comment puis-je vérifier en toute sécurité l'existence de clés imbriquées dans les objets JavaScript ?

Patricia Arquette
Libérer: 2024-12-20 06:29:13
original
419 Les gens l'ont consulté

How Can I Safely Check for the Existence of Nested Keys in JavaScript Objects?

Test de l'existence de clés d'objets JavaScript imbriqués

Vérifier l'existence de propriétés au sein d'objets JavaScript imbriqués pose un défi, en particulier face à des potentiels valeurs nulles ou non définies. Pour résoudre ce problème, envisagez d'utiliser une approche étape par étape au lieu de vous fier à un accès direct à la propriété, risqué et sujet aux erreurs.

Une solution viable implique une fonction sur mesure qui teste la présence de plusieurs niveaux imbriqués. Cette fonction, élégamment nommée checkNested, accepte l'objet cible comme premier argument, suivi d'une série de noms de propriétés imbriqués attendus. Il vérifie systématiquement l'existence de chaque propriété, renvoyant vrai si toutes sont trouvées et faux sinon.

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

Par exemple, étant donné l'objet :

var test = {
  level1: {
    level2: {
      level3: 'level3',
    },
  },
};
Copier après la connexion

Appel de checkNested avec l'attendu niveaux renvoie les résultats attendus :

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

ES6 Optimisations

L'exploitation des fonctionnalités d'ES6 peut rationaliser davantage cette fonction, ce qui entraîne une mise en œuvre concise et efficace. La récursivité et l'optimisation des appels de fin se combinent pour créer une solution succincte mais puissante :

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

De plus, si votre objectif est de récupérer la valeur d'une propriété imbriquée au lieu de simplement tester son existence, une approche plus simple consiste à disponible :

function getNested(obj, ...args) {
  return args.reduce((obj, level) => obj && obj[level], obj);
}

const test = {
  level1: {
    level2: {
      level3: 'level3',
    },
  },
};
console.log(getNested(test, 'level1', 'level2', 'level3')); // 'level3'
console.log(getNested(test, 'level1', 'level2', 'level3', 'length')); // 6
console.log(getNested(test, 'level1', 'level2', 'foo')); // undefined
console.log(getNested(test, 'a', 'b')); // undefined
Copier après la connexion

En tirant parti de ces techniques, vous pouvez naviguer dans les complexités des objets JavaScript imbriqués en toute confiance, garantissant ainsi la robustesse et la fiabilité de votre code.

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