203 votes

Obtenir le premier indice d'un objet

Pensez-y :

var object = {
  foo: {},
  bar: {},
  baz: {}
}

Comment dois-je m'y prendre ?

var first = object[0];
console.log(first);

Évidemment, cela ne fonctionne pas car le premier index est nommé foo , pas 0 .

console.log(object['foo']);

fonctionne, mais je ne sais pas s'il s'agit de foo. Il peut s'appeler n'importe quoi. Je veux juste le premier.

331voto

Jacob Points 2141

Juste pour le plaisir, ceci fonctionne en JS 1.8.5.

var obj = {a: 1, b: 2, c: 3};
Object.keys(obj)[0]; // "a"

Cela correspond au même ordre que celui que vous verriez en faisant

for (o in obj) { ... }

24 votes

C'est clairement la meilleure option, à moins que la compatibilité avec les mots de l'âge de pierre ne soit requise.

1 votes

100% la meilleure réponse. C'est le moyen le plus simple et le plus rapide de le faire.

3 votes

Juste pour clarifier, selon fr.wikipedia.org/wiki/JavaScript#Version_history JS 1.8.5 n'est pas supporté avant IE9. Malheureusement, beaucoup de gens sont encore à l'âge de pierre.

204voto

Patrick Hayes Points 1047

Si vous voulez quelque chose de concis, essayez :

for (first in obj) break;

alert(first);

enveloppé comme une fonction :

function first(obj) {
    for (var a in obj) return a;
}

8 votes

Voir la réponse de Luke Schafer ci-dessous, qui utilise la méthode hasOwnProperty pour s'assurer que vous ne saisissez pas les membres du prototype.

3 votes

Pour qu'une ligne unique fonctionne dans tous les navigateurs, y compris IE8 et les versions inférieures, utilisez for (var key in obj) if (obj.hasOwnProperty(key)) break; Vous voudrez alors utiliser l'option key variable

0 votes

Ne fonctionne pas si le premier élément est un type d'objet. renvoie 0

77voto

Luke Schafer Points 6250

Ils ne sont pas vraiment commandé, mais vous pouvez le faire :

var first;
for (var i in obj) {
    if (obj.hasOwnProperty(i) && typeof(i) !== 'function') {
        first = obj[i];
        break;
    }
}

le site .hasOwnProperty() il est important d'ignorer les objets prototypés.

0 votes

Il y a une erreur dans le code ci-dessus. La vérification de typeof devrait être typeof(i)

0 votes

@Napalm il faisait référence à l'erreur dans le nom de la variable qui est vérifiée, pas la syntaxe. Vous avez raison, mais beaucoup de gens aiment les crochets pour plus de lisibilité.

0 votes

Merci. C'est incroyable.

76voto

Rob Fox Points 1386

Cela ne vous donnera pas le premier car les objets javascript ne sont pas ordonnés, mais cela convient dans certains cas.

myObject[Object.keys(myObject)[0]]

61voto

Miles Points 12977

Si l'ordre des objets est important, vous devez réviser votre schéma JSON pour stocker les objets dans un tableau :

[
    {"name":"foo", ...},
    {"name":"bar", ...},
    {"name":"baz", ...}
]

ou peut-être :

[
    ["foo", {}],
    ["bar", {}],
    ["baz", {}]
]

Comme le souligne Ben Alpert, les propriétés des objets Javascript ne sont pas ordonnées, et votre code ne fonctionne pas si vous vous attendez à ce qu'elles soient énumérées dans l'ordre où elles sont spécifiées dans le littéral de l'objet - il n'y a pas de "première" propriété.

6 votes

Je n'ai jamais vu for(i in obj) faire des choses dans un ordre différent, êtes-vous en train de dire que parfois for(i in obj) fera des choses dans un ordre différent ?

4 votes

Il est possible qu'elle le fasse. Les spécifications précisent qu'il n'est pas nécessaire de les énumérer dans un ordre spécifique. Cela signifie en gros que cet ordre peut changer.

5 votes

La plupart des navigateurs actuels préservent l'ordre d'insertion, mais cela n'a pas toujours été le cas ; la spécification ne l'exige pas, et certaines versions récentes de Chrome ne préservaient pas l'ordre d'insertion.

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