2009-07-12 13 views
16

Gibt es eine Möglichkeit, den Namen der ersten Eigenschaft eines JSON-Objekts abzurufen?Erste JSON-Eigenschaft abrufen

Ich möchte so etwas wie dies zu tun:

var firstProp = jsonObj[0]; 

edit: Ich bin ein JSON-Objekt wich hold Kategorien von Arrays mit Bild Urls bekommen.

wie so:

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

ich dann durch das Objekt iterieren die Bilder einzufügen, und alles, was ich wollte, war wirklich ein eleganter Weg, um zu sehen, welche Kategorie zuerst eingeführt wurde. Zuerst habe ich nur

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

Aber das einige, wie „gefühlte“ hässlich ... So war es im Grunde nur eine Frage der Eleganz: p

+1

Können Sie nicht ein Array verwenden stattdessen? – Gumbo

+0

Betrüger: http: // Stapelüberlauf.com/questions/909003/javascript-getting-the-first-index-of-ein-objekt/909044 # 909044 – Miles

Antwort

28

Die Reihenfolge der Eigenschaften eines Objekts ist nicht garantiert zu sein die gleiche wie die Art und Weise Sie sie in der Praxis, aber alle gängigen Browser geben sie in der Reihenfolge zurück. Wenn Sie also mit Berufung auf diese in Ordnung sind ...

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

Beachten Sie auch, dass es eine bug in Chrome ist in Bezug auf die Bestellung, in einigen Rand Fällen ist es nicht in die Quere bestellen sie geliefert wurden. Soweit es sich in der Zukunft ändert, sind die Chancen eigentlich ziemlich gering, da ich glaube, dass dies Teil des Standards wird, wenn überhaupt, wird Unterstützung nur offiziell werden.

Alles in allem, wenn Sie wirklich, wirklich, absolut, positiv, sicher sein wollen, dass es in der richtigen Reihenfolge ist, müssen Sie ein Array verwenden. Ansonsten ist das Obige in Ordnung.

Verwandte Frage: Elements order - for (… in …) loop in javascript

+0

Aber was ist, wenn sich das ändert? in der Zukunft? –

+1

Nur ein Hinweis, dass die Reihenfolge der Objekteigenschafts-Enumeration nicht in die ECMAScript 5-Spezifikation aufgenommen wurde, Chrome hat sich schnell verhalten, und nun folgen andere Browser, so dass @ the_drows Befürchtungen begründet waren. –

2

Große Frage. Ich kenne keine andere Möglichkeit, als in einer For-In-Schleife zu iterieren. Sie müssen nur einmal iterieren. Stellen Sie aus Sicherheitsgründen sicher, dass es sich um eine bekannte Eigenschaft handelt [more info].

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

Edited besonders klar sein, dass Sie über den Eigenschaftsnamen sind laufen, nicht ihre Werte.

14

Es gibt keine "erste" Eigenschaft. Die Eigenschaften eines Objekts sind ungeordnet.

Sie können erhalten, was auch immer die JS-Engine beschließt, zuerst mit einer Schleife zu liefern.

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

& hellip; Wenn die Reihenfolge wichtig ist, verwenden Sie ein Array, kein Objekt.

+1

Guter Punkt, dass sie nicht garantiert werden, um die Reihenfolge zu sein, die Sie sie in - upvoted angegeben haben. Ich würde sicherstellen, hasOwnProperty() zu überprüfen. –

+0

Ich bekomme ein JSON-Objekt, also Arrays sind nicht wirklich eine Option ... – peirix

+1

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

1

Wenn jQuery verwenden, können Sie auch $.each verwenden, um ein JSON-Objekt iterieren. IMO sieht sauberer als mit einem 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

Es wäre besser, eine kleine Erklärung zu schreiben, warum dies die Antwort ist und warum deine besser ist als die anderen. –

+0

Wie ich es verstehe, erstellt Object.keys (jsonObj) ein Array der Schlüssel des Objekts, auf das mit Hilfe der Notation [] zugegriffen werden kann. [0] ist das erste Element im Array. Wenn Sie dies als Schlüsselsuche für das jsonObject (innerhalb seiner eigenen eckigen Klammern) hinzufügen, sagen Sie dies im Wesentlichen; "Machen Sie ein Array aller Schlüssel im Objekt, geben Sie mir die erste, jetzt die Werte für diesen Schlüssel, im ursprünglichen Objekt nachschlagen". – Squidinker

+0

Ich mag das eigentlich besser – Rikku121

Verwandte Themen