2009-07-12 6 views
16

Existe-t-il un moyen d'obtenir le nom de la première propriété d'un objet JSON?Obtention de la première propriété JSON

Je voudrais faire quelque chose comme ceci:

var firstProp = jsonObj[0]; 

modifier: Je reçois un objet JSON catégories Wich de maintien de tableaux avec urls d'image.

comme ceci:

{ 
    "category1":["image/url/1.jpg","image/url/2.jpg"], 
    "category2":["image/url/3.jpg","image/url/4.jpg"] 
} 

J'itérer puis à travers l'objet d'insérer les images, et tout ce que je voulais vraiment était une façon élégante de voir quelle catégorie a été inséré en premier. Au début, je viens de faire

for (var cat in images) { 
    if (i==0) firstCat = cat; 
    ... 
} 

Mais que certains comment « senti » laid ... Il était fondamentalement juste une question d'élégance: p

+1

Tu ne peux pas utiliser à la place un tableau? – Gumbo

+0

dupe: http: // stackoverflow.com/questions/909003/javascript-obtention-du-premier-index-d'un objet/909044 # 909044 – Miles

Répondre

28

L'ordre des propriétés d'un objet n'est pas garanti pour être le même que la façon dont vous les mettez. En pratique, cependant, tous les principaux navigateurs les renvoient dans l'ordre. Donc, si vous êtes d'accord avec cette ... compter sur

var firstProp; 
for(var key in jsonObj) { 
    if(jsonObj.hasOwnProperty(key)) { 
     firstProp = jsonObj[key]; 
     break; 
    } 
} 

Notez également qu'il ya un bug in Chrome en ce qui concerne l'ordre, dans certains cas limites, il ne commande pas la façon dont ils ont été fournis. En ce qui concerne les changements dans le futur, les chances sont vraiment minces car je crois que cela devient une partie de la norme, donc si quelque chose de soutien pour cela ne deviendra officiel. Tout compte fait, cependant, si vous voulez vraiment, absolument, absolument, positivement, être sûr que tout ira dans le bon ordre, vous devez utiliser un tableau. Sinon, ce qui précède est bien.

question connexe: Elements order - for (… in …) loop in javascript

+0

Mais que se passe-t-il si cela change A l'avenir? –

+1

Juste une note pour dire que l'ordre d'énumération de propriété d'objet n'a pas fait dans la spécification d'ECMAScript 5, Chrome a tenu bon dans son comportement et maintenant d'autres navigateurs suivent, ainsi les craintes de @ the_drow étaient bien fondées. –

2

Grande question. Je ne connais pas d'autre moyen que d'itérer dans une boucle for-in. Vous avez seulement besoin de répéter une fois. Pour des raisons de sécurité, assurez-vous que c'est une propriété connue [more info].

for (var propName in jsonObj) { 
    if (jsonObj.hasOwnProperty(propName)) { 
     return propName; // or do something with it and break 
    } 
} 

Edité t'être itérez extra clair que sur les noms de propriété, et non leurs valeurs.

14

Il n'y a pas de "première" propriété. Les propriétés d'un objet sont non ordonnées.

Vous pouvez obtenir ce que le moteur JS décide de fournir en premier avec une boucle.

function maybe_first_in_object(ob) { 
    for (var props in ob) { 
     return prop; 
    } 
} 

& hellip; mais si l'ordre compte, utilisez un tableau pas un objet.

+1

Bon point que l'ordre dans lequel vous les avez spécifiés n'est pas garanti - upvoted. Je ferais en sorte de vérifier hasOwnProperty() si. –

+0

Je reçois un objet JSON, donc les tableaux ne sont pas vraiment une option ... – peirix

+1

Errrrrrrr ......... {data: [1,2,3,4]} – Quentin

1

Lorsque vous utilisez jQuery, vous pouvez également utiliser $.each pour itérer sur un objet JSON. On dirait plus propre de l'OMI que d'utiliser un for -loop

var items = { 
    'item1': 'content', 
    'item2': 'content', 
    'item3': 'content' 
} 

$.each(items, function() { 
    console.log($(this)[0]) 
}) 
17
console.log(jsonObj[Object.keys(jsonObj)[0]]); 
+0

Il vaudrait mieux écrire une petite explication de pourquoi c'est la réponse, et pourquoi la tienne est meilleure que les autres. –

+0

Si je comprends bien, Object.keys (jsonObj) va créer un tableau des clés de l'objet qui peut être consulté en utilisant la notation []. [0] est le premier élément du tableau. Ajouter ceci comme recherche de clé pour jsonObject (à l'intérieur de ses propres crochets) signifie essentiellement cela; "Faites un tableau de toutes les clés dans l'objet, donnez-moi le premier de ceux-ci, maintenant rechercher les valeurs de cette clé, dans l'objet original". – Squidinker

+0

En fait, j'aime mieux celui-ci – Rikku121

Questions connexes