Maison > interface Web > js tutoriel > Comment puis-je convertir une chaîne JavaScript en notation par points en une référence d'objet ?

Comment puis-je convertir une chaîne JavaScript en notation par points en une référence d'objet ?

Linda Hamilton
Libérer: 2024-12-19 18:19:09
original
729 Les gens l'ont consulté

How can I convert a JavaScript string in dot notation into an object reference?

Convertir une chaîne JavaScript en notation par points en une référence d'objet

En JavaScript, naviguer dans les propriétés d'un objet à l'aide de la notation par points est une pratique courante et pratique . Cependant, il peut arriver que vous ayez une chaîne représentant une hiérarchie séparée par des points et que vous deviez la convertir en référence d'objet pour un accès facile.

Énoncé du problème :

Étant donné un objet et une chaîne en notation par points, comment convertir la chaîne en référence d'objet pour accéder au correspondant propriété ?

Exemple :

Considérons l'objet suivant :

var obj = { a: { b: '1', c: '2' } }
Copier après la connexion

Et une chaîne :

"a.b"
Copier après la connexion

Comment pouvez-vous convertir "a.b" pour récupérer la valeur associée à obj.a.b?

Solution :

Il existe plusieurs méthodes pour y parvenir :

1. Utilisation de la fonction eval() (NON RECOMMANDÉ) :

eval("var val = obj." + string);
Copier après la connexion

Cette solution évalue directement la chaîne sous forme de code et attribue le résultat à val. Cependant, l'utilisation de eval() est généralement déconseillée pour des raisons de sécurité.

2. Utilisation de l'opérateur [] (méthode indirecte) :

var val = obj[string];
Copier après la connexion

Cette méthode utilise la syntaxe des crochets pour accéder indirectement à la propriété. Cela fonctionne lorsque la chaîne est un identifiant JavaScript valide (par exemple, sans espaces ni caractères spéciaux).

3. Utilisation de la méthode réduire() :

var val = string.split('.').reduce(function(obj, i) { return obj[i]; }, obj);
Copier après la connexion

Cette solution divise la chaîne par le point (.) et utilise la méthode réduire() pour parcourir la hiérarchie des objets, en commençant par l'objet racine.

4. Utilisation de la fonction multiIndex() :

var val = multiIndex(obj, string.split('.'));

function multiIndex(obj, is) {
    return is.length ? multiIndex(obj[is[0]],is.slice(1)) : obj
}
Copier après la connexion

Cette solution parcourt de manière récursive la hiérarchie des objets jusqu'à ce que la propriété souhaitée soit trouvée. Il gère à la fois la notation par points à plusieurs niveaux et les tableaux (si nécessaire).

Gestion des tableaux (facultatif) :

Dans le cas où la chaîne contient des indices de tableau, vous pouvez utiliser l'approche suivante :

var val = string.match(/[^\]\[.]+/g).reduce(function(obj, i) { return obj[i]; }, obj);
Copier après la connexion

Supplémentaire Remarques :

  • Prenez en compte les implications en termes de performances lors de l'utilisation de la récursivité ou de la réduction(), en particulier pour les hiérarchies d'objets volumineuses ou complexes.
  • Assurez-vous que les chaînes d'entrée sont nettoyées pour empêcher tout code malveillant. exécution.
  • Les clés de propriété en JavaScript sont toujours des chaînes, donc les références d'objet utilisant la notation par points sont intrinsèquement basé sur des chaînes.

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