Existe-t-il un moyen élégant d'accéder à la première propriété d'un objet ...
- où vous ne connaissez pas le nom de vos propriétés
- sans utiliser une boucle comme
for .. in
ou jQuery$.each
Par exemple, j'ai besoin d'accéder à un foo1
objet sans connaître le nom de foo1:
var example = {
foo1: { /* stuff1 */},
foo2: { /* stuff2 */},
foo3: { /* stuff3 */}
};
javascript
object
Google
la source
la source
Réponses:
En utilisant cela, vous pouvez également accéder à d'autres propriétés par des index. Soyez conscient tho!
Object.keys
l'ordre de retour n'est pas garanti selon ECMAScript, mais officieusement c'est par toutes les implémentations principales des navigateurs, veuillez lire https://stackoverflow.com/a/23202095 pour plus de détails à ce sujet.la source
first()
ou quelque chose de similaire pourrait gérer cela.Essayez la
for … in
boucle et coupez après la première itération:la source
Vous pouvez aussi le faire
Object.values(example)[0]
.la source
Object.keys
, car vous êtes assuré d'obtenir le premier article.Utilisez
Object.keys
pour obtenir un tableau des propriétés d'un objet. Exemple:Documentation et module d'interface multi-navigateur fournis ici . Un exemple de son utilisation peut être trouvé dans une autre de mes réponses ici .
Edit : pour plus de clarté, je veux juste faire écho à ce qui a été correctement déclaré dans d'autres réponses: l'ordre des touches dans les objets javascript n'est pas défini.
la source
Une version à une règle:
la source
for in
sans vérifierhasOwnProperty
car l'objet contient d'autres valeurs indésirables qui lui sont ajoutées par programme afin que vous puissiez finir par obtenir un résultat indésirable à partir de cet extrait. Ce n'est pas parce qu'il est court et soigné qu'il est optimal et sûr.Il n'y a pas de "première" propriété. Les clés d'objet ne sont pas ordonnées.
Si vous les parcourez avec pour
(var foo in bar)
vous les obtiendrez dans un certain ordre, mais cela peut changer à l'avenir (surtout si vous ajoutez ou supprimez d'autres clés).la source
Solution avec la bibliothèque lodash :
mais il n'y a aucune garantie de l'ordre de stockage interne des propriétés de l'objet car cela dépend de l'implémentation de la machine virtuelle javascript.
la source
var object = { childIndex: { .. } }; var childObject = _.find(Object);
Non. Un littéral objet, tel que défini par MDC, est:
Par conséquent, un littéral d'objet n'est pas un tableau et vous ne pouvez accéder aux propriétés qu'en utilisant leur nom explicite ou une
for
boucle en utilisant lein
mot clé.la source
La première réponse pourrait générer l'ensemble du tableau, puis capturer à partir de la liste. Voici un autre raccourci efficace
la source
Cela a déjà été abordé ici.
Le concept de premier ne s'applique pas aux propriétés des objets, et l'ordre d'une boucle for ... in n'est pas garanti par les spécifications, mais dans la pratique, il est fiable FIFO sauf de manière critique pour chrome ( rapport de bogue ). Prenez vos décisions en conséquence.
la source
Je ne vous recommande pas d'utiliser Object.keys car il n'est pas pris en charge dans les anciennes versions d'IE. Mais si vous en avez vraiment besoin, vous pouvez utiliser le code ci-dessus pour garantir la compatibilité arrière:
Fonctionnalité Firefox (Gecko) 4 (2.0) Chrome 5 Internet Explorer 9 Opera 12 Safari 5
Plus d'informations: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/keys
Mais si vous n'avez besoin que du premier, nous pourrions organiser une solution plus courte comme:
la source
Pour obtenir le premier nom de clé dans l'objet, vous pouvez utiliser:
Renvoie une chaîne, vous ne pouvez donc pas accéder aux objets imbriqués s'il y en avait, comme:
var obj = { first: { someVal : { id : 1} };
Ici, avec cette solution, vous ne pouvez pas accéder à id.La meilleure solution si vous souhaitez obtenir l'objet réel est d'utiliser lodash comme:
Pour renvoyer la valeur de la première clé (si vous ne connaissez pas exactement le premier nom de clé):
si vous connaissez le nom de la clé, utilisez simplement:
ou
la source
Si vous devez accéder à "la première propriété d'un objet", cela peut signifier qu'il y a un problème avec votre logique. L'ordre des propriétés d'un objet ne devrait pas avoir d'importance.
la source
Utilisez un tableau au lieu d'un objet (crochets).
Notez que vous perdez les identifiants «foo». Mais vous pouvez ajouter une propriété de nom aux objets contenus:
la source
Une raison de ne pas faire ça?
la source
.map()
n'existe que pour les itérablesVous pouvez utiliser
Object.prototype.keys
qui renvoie toutes les clés d'un objet dans le même ordre. Donc, si vous voulez le premier objet, obtenez simplement ce tableau et utilisez le premier élément comme clé souhaitée.la source
on peut aussi faire avec cette approche.
la source
Voici une façon plus propre d'obtenir la première clé:
la source
[first]
. L'utilisateur n'a pas demandé de tableau comme réponse. Pourquoi faire cela surfirst = Object.keys(example)[0]
qui fera la même chose sans avoir à envelopper la réponse dans un tableau. Pourquoi le vôtre est-il plus propre s'il vous plaît?