772 votes

Comment accéder à la première propriété d'un objet Javascript ?

Existe-t-il un moyen élégant d'accéder à la première propriété d'un objet...

  1. où vous ne connaissez pas le nom de vos propriétés.
  2. sans utiliser une boucle comme for .. in ou de jQuery $.each

Par exemple, j'ai besoin d'accéder foo1 sans connaître le nom de foo1 :

var example = {
    foo1: { /* stuff1 */},
    foo2: { /* stuff2 */},
    foo3: { /* stuff3 */}
};

1 votes

Il est probablement préférable de le transformer en un tableau d'abord

1678voto

Grzegorz Kaczan Points 2528
var obj = { first: 'someVal' };
obj[Object.keys(obj)[0]]; //returns 'someVal'

Vous pouvez ainsi accéder à d'autres propriétés par le biais d'index. Attention toutefois ! Object.keys L'ordre de retour n'est pas garanti par l'ECMAScript, mais il l'est officieusement par les principales implémentations des navigateurs. https://stackoverflow.com/a/23202095 pour plus de détails à ce sujet.

30 votes

Vous dites que ce n'est pas le moyen le plus rapide. Quel moyen serait le plus rapide ?

7 votes

Cette méthode n'est pas très efficace car elle crée un tableau complet de toutes les clés de l'objet.

11 votes

@T Nguyen Je le posterais si je le connaissais :)

140voto

Gumbo Points 279147

Essayez le for … in boucle et s'arrêter après la première itération :

for (var prop in object) {
    // object[prop]
    break;
}

1 votes

Je pense que c'est à peu près la seule option. Mais je ne suis pas sûr que vous ayez la garantie que les propriétés seront itérées dans un ordre prévisible/utile. Par exemple, vous pouvez avoir l'intention d'utiliser foo1 mais obtenir foo3. Si les propriétés sont numérotées comme dans l'exemple, vous pourriez faire une comparaison de chaînes pour vérifier l'identifiant se terminant par '1'. Mais si l'ordinalité est la principale préoccupation de la collection, vous devriez probablement utiliser un tableau plutôt qu'un objet.

2 votes

Si quelqu'un d'autre s'inquiète de l'ordre, la plupart des navigateurs se comportent de manière prévisible : stackoverflow.com/questions/280713/

9 votes

Var prop ; for (prop in object) break ; //object[prop]

51voto

benekastah Points 2602

Utilisez Object.keys pour obtenir un tableau des propriétés d'un objet. Exemple :

var example = {
    foo1: { /* stuff1 */},
    foo2: { /* stuff2 */},
    foo3: { /* stuff3 */}
};

var keys = Object.keys(example); // => ["foo1", "foo2", "foo3"] (Note: the order here is not reliable)

Documentation et shim multi-navigateur fournis aquí . Un exemple de son utilisation se trouve dans une autre de mes réponses aquí .

Editar Pour plus de clarté, je veux juste faire écho à ce qui a été correctement énoncé dans d'autres réponses : l'ordre des clés dans les objets JavaScript est indéfini.

24voto

Quentin Points 325526

Il n'y a pas de propriété "première". Les clés des objets ne sont pas ordonnées.

Si vous bouclez sur eux avec for (var foo in bar) vous les obtiendrez en un peu de mais elle peut changer à l'avenir (notamment si vous ajoutez ou supprimez d'autres clés).

0 votes

Génial. J'ai utilisé un objet pour implémenter une carte qui maintient l'ordre d'insertion. Cela se casse dès que je supprime une valeur car l'insertion suivante comble le vide :(

3 votes

L'ordre clé/valeur devrait être préservé dans les nouvelles versions de JS

8voto

Alex Rozanski Points 26107

Non. Un objet littéral, comme défini par MDN est :

une liste de zéro ou plusieurs paires de noms de propriétés et de valeurs associées d'un objet, entre accolades ({}).

Par conséquent, un objet littéral n'est pas un tableau, et vous ne pouvez accéder aux propriétés qu'en utilisant leur nom explicite ou une balise for boucle en utilisant le in mot-clé.

26 votes

Pour ceux qui ne voient que la coche verte sur cette réponse, il y a une autre solution plus bas sur la page avec actuellement 350 votes positifs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X