Maison >interface Web >js tutoriel >Comment accéder efficacement aux propriétés d'objets JavaScript imbriqués à l'aide de chaînes de notation par points ?

Comment accéder efficacement aux propriétés d'objets JavaScript imbriqués à l'aide de chaînes de notation par points ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-30 10:02:11579parcourir

How to Efficiently Access Nested JavaScript Object Properties Using Dot Notation Strings?

Accès aux propriétés enfants d'un objet avec des chaînes de notation par points

En JavaScript, il existe plusieurs façons d'accéder aux propriétés d'un objet. Cependant, accéder aux propriétés imbriquées avec un chemin de chaîne peut être un défi.

Étant donné un objet tel que :

var r = { a:1, b: { b1:11, b2: 99}};

Considérez un scénario dans lequel vous souhaitez accéder à la valeur 99 en spécifiant une chaîne de chemin var s = "b.b2". Bien que les méthodes traditionnelles comme r.b.b2 ou r['b']['b2'] fonctionnent, vous préférerez peut-être utiliser une notation plus concise.

Une solution naïve mais efficace

function getDescendantProp(obj, desc) {
    var arr = desc.split(".");
    while(arr.length && (obj = obj[arr.shift()]));
    return obj;
}

Cette fonction divise de manière itérative la chaîne en points et parcourt la structure de l'objet, renvoyant finalement la propriété demandée.

Exemple Utilisation

console.log(getDescendantProp(r, "b.b2"));
//-> 99

Extensions

La fonction fournie prend uniquement en charge l'accès aux propriétés des objets imbriqués. Pour une utilisation plus avancée, vous pouvez le modifier pour gérer également les index de tableau :

function advancedGetDescendantProp(obj, desc) {
    var arr = desc.split(".");
    while(arr.length) {
        let key = arr.shift();
        if (isNaN(key)) {
            obj = obj[key];
        } else {
            obj = obj[parseInt(key)];
        }
        if (!obj) return undefined;
    }
    return obj;
}

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