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
Linda Hamiltonoriginal
2025-01-01 07:09:11620parcourir

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

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

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);
}

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

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