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' } }
Et une chaîne :
"a.b"
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);
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];
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);
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 }
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);
Supplémentaire Remarques :
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!