J'essaie d'accéder à une propriété d'un objet en utilisant un nom dynamique. Est-ce possible?
const something = { bar: "Foobar!" };
const foo = 'bar';
something.foo; // The idea is to access something.bar, getting "Foobar!"
javascript
object
properties
RichW
la source
la source
Réponses:
Il existe deux façons d'accéder aux propriétés d'un objet:
something.bar
something['bar']
La valeur entre crochets peut être n'importe quelle expression. Par conséquent, si le nom de la propriété est stocké dans une variable, vous devez utiliser la notation entre crochets:
la source
Voici ma solution:
Exemples d'utilisation:
la source
En javascript, nous pouvons accéder avec:
foo.bar
foo[someVar]
oufoo["string"]
Mais seul le deuxième cas permet d'accéder dynamiquement aux propriétés:
la source
Voici un exemple ES6 de la façon dont vous pouvez accéder à la propriété d'un objet à l'aide d'un nom de propriété qui a été généré dynamiquement en concaténant deux chaînes.
C'est ce qu'on appelle les noms de propriété calculés
la source
Vous pouvez y parvenir de différentes manières.
La notation entre crochets est particulièrement puissante car elle vous permet d'accéder à une propriété basée sur une variable:
Cela peut être étendu au bouclage sur chaque propriété d'un objet. Cela peut sembler redondant en raison de nouvelles constructions JavaScript telles que pour ... de ..., mais aide à illustrer un cas d'utilisation:
La notation par points et par crochets fonctionne également comme prévu pour les objets imbriqués:
Déstructuration d'objets
Nous pourrions également considérer la déstructuration d'objet comme un moyen d'accéder à une propriété dans un objet, mais comme suit:
la source
Vous pouvez le faire comme ceci en utilisant Lodash get
la source
MISE À JOUR
J'ai pris en considération les commentaires ci-dessous et je suis d'accord. Eval est à éviter.
L'accès aux propriétés de la racine dans l'objet est facile à réaliser
obj[variable]
, mais obtenir des emboîtements complique la chose. Ne pas écrire de code déjà écrit que je suggère d'utiliserlodash.get
.Exemple
Lodash get peut être utilisé de différentes manières, voici le lien vers la documentation lodash.get
la source
eval
autant que possible. stackoverflow.com/questions/86513/…eval
pour quelque chose d'aussi banal que d'accéder à des propriétés est tout simplement exagéré et à peine recommandé en aucune circonstance. Quel est le "problème"?obj['nested']['test']
fonctionne très bien et ne vous oblige pas à incorporer du code dans des chaînes.obj['nested']['value']
- rappelez-vous les enfants, eval est mauvais!_.get
à la table. Je pense que cette réponse mérite maintenant des votes positifs plutôt que des votes négatifs. C'est peut-être exagéré, mais il est bon de savoir qu'il existe.Chaque fois que vous devez accéder dynamiquement à une propriété, vous devez utiliser un crochet pour accéder à la propriété et non à "." opérateur
Syntaxe: objet [propriété]
la source
Je suis tombé sur un cas où je pensais que je voulais passer l '"adresse" d'une propriété d'objet en tant que données à une autre fonction et remplir l'objet (avec AJAX), faire une recherche dans le tableau d'adresses et afficher dans cette autre fonction. Je ne pouvais pas utiliser la notation par points sans faire des acrobaties de chaînes, j'ai donc pensé qu'un tableau pourrait être agréable à passer à la place. J'ai fini par faire quelque chose de différent de toute façon, mais je semblais lié à ce post.
Voici un exemple d'un objet de fichier de langue comme celui dont je voulais des données:
Je voulais pouvoir passer un tableau tel que: ["audioPlayer", "contrôles", "stop"] pour accéder au texte de la langue, "stop" dans ce cas.
J'ai créé cette petite fonction qui recherche le paramètre d'adresse (le moins) "le moins spécifique" et réaffecte l'objet renvoyé à lui-même. Il est ensuite prêt à rechercher le paramètre d'adresse suivant le plus spécifique, s'il en existe un.
usage:
la source
Cela devient intéressant lorsque vous devez également passer des paramètres à cette fonction.
Code jsfiddle
la source
ES5 // Vérifier les variables profondément imbriquées
Ce simple morceau de code peut vérifier l'existence de variables / valeurs profondément imbriquées sans avoir à vérifier chaque variable en cours de route ...
Ex. - un tableau d'objets profondément imbriqués:
Au lieu de :
Nous pouvons maintenant:
À votre santé!
la source
Function
placeJ'ai posé une question qui a un peu dupliqué sur ce sujet il y a quelque temps, et après des recherches excessives, et voyant beaucoup d'informations manquantes qui devraient être ici, je pense que j'ai quelque chose de précieux à ajouter à cet ancien article.
Cependant, je vais rarement dans cette voie car cela ne fonctionne pas sur les valeurs de propriété attribuées via les feuilles de style. Pour vous donner un exemple, je vais démontrer avec un peu de pseudo-code.
En utilisant l'exemple de code ci-dessus; si la propriété width de l'élément div qui était stocké dans la variable 'elem' était stylisée dans une feuille de style CSS, et non stylisée à l'intérieur de sa balise HTML, vous obtiendrez sans aucun doute une valeur de retour indéfinie stockée à l'intérieur de la variable cssProp. La valeur indéfinie se produit parce que pour obtenir la valeur correcte, le code écrit à l'intérieur d'une feuille de style CSS doit être calculé afin d'obtenir la valeur, par conséquent; vous devez utiliser une méthode qui calculera la valeur de la propriété dont la valeur se trouve dans la feuille de style.
W3Schools getComputedValue Doc Cela donne un bon exemple et vous permet de jouer avec, cependant, ce lien Le document Mozilla CSS getComputedValue parle de la fonction getComputedValue en détail, et devrait être lu par tout développeur en herbe qui n'est pas totalement clair sur ce sujet.
... obtient, et se couche. C'est ce que j'utilise, le seul inconvénient est que vous connaissez JQuery, mais c'est honnêtement l'une des très bonnes raisons pour que chaque développeur Javascript apprenne JQuery, cela rend la vie facile et propose des méthodes, comme celle-ci, qui n'est pas disponible avec Javascript standard. J'espère que cela aide quelqu'un !!!
la source
Pour tous ceux qui souhaitent définir la valeur d'une variable imbriquée, voici comment procéder:
Documentation: https://lodash.com/docs/4.17.15#set
Aussi, documentation si vous souhaitez obtenir une valeur: https://lodash.com/docs/4.17.15#get
la source
Vous devez utiliser
JSON.parse
, consultez https://www.w3schools.com/js/js_json_parse.aspla source
la source
foo
est déjà une chaîne,`${foo}`
c'est exactement la même chose quefoo
. (En outre, votre code semble avoir des barres obliques inverses supplémentaires qui ne lui appartiennent pas. Mais cela serait toujours inutile même si vous