Maison > interface Web > js tutoriel > Comment puis-je vérifier efficacement l'existence de clés imbriquées dans un objet JavaScript ?

Comment puis-je vérifier efficacement l'existence de clés imbriquées dans un objet JavaScript ?

Linda Hamilton
Libérer: 2025-01-01 07:09:11
original
608 Les gens l'ont consulté

How Can I Efficiently Check for the Existence of Nested Keys in a JavaScript Object?

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

Lors de l'inspection d'objets JavaScript profondément imbriqués, vérifier la présence de clés spécifiques peut devenir un défi. L'approche standard implique des vérifications séquentielles, mais cela peut être à la fois fastidieux et sujet à des erreurs.

Une solution plus robuste consiste à utiliser des fonctions récursives qui parcourent la structure de l'objet étape par étape. Par exemple :

function checkNested(obj, ...levels) {
  for (var i = 0; i < levels.length; i++) {
    if (!obj || !obj.hasOwnProperty(levels[i])) {
      return false;
    }
    obj = obj[levels[i]];
  }
  return true;
}
Copier après la connexion

Cette fonction prend un objet et un nombre arbitraire de niveaux comme arguments. Il parcourt les niveaux, vérifie si chaque clé correspondante existe et incrémente le pointeur d'objet. Si une clé est manquante ou si l'objet n'est pas défini, il renvoie false ; sinon, il renvoie vrai.

Exemple d'utilisation :

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

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

Alternativement, ES6 peut être exploité pour simplifier la fonction récursive :

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

Cependant, pour récupérer le valeur d'une propriété profondément imbriquée, une fonction sur une ligne peut être utilisée :

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

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
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