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
Patricia Arquetteoriginal
2024-12-20 06:29:13416parcourir

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

Par exemple, étant donné l'objet :

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

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

checkNested(test, 'level1', 'level2', 'level3'); // true
checkNested(test, 'level1', 'level2', 'foo'); // false

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

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

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!

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