2009-07-12 30 views
16

JSONオブジェクトの最初のプロパティの名前を取得する方法はありますか?最初のJSONプロパティの取得

私はこのような何かをしたいと思います:

var firstProp = jsonObj[0]; 

編集:私は画像のURLを配列のJSONオブジェクトウィッヒホールドカテゴリを取得しています。そのような

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

私はその後、画像を挿入するために、オブジェクトを反復処理しています、と私は本当に欲しかったすべてが最初に挿入されたカテゴリを確認するエレガントな方法でした。 P

+1

を使用するよりも見えますか? – Gumbo

+0

dupe:http:// stackoverflow。com/questions/909003/javascript-get-the-first-object-of-object/909044#909044 – Miles

答えて

28

オブジェクトのプロパティの順序はは、あなたがそれらを置く方法と同じになるようにを保証するものではありません。しかし実際には、すべての主要なブラウザは、順序でそれらを返却します。あなたはこれに頼るといいならそう...

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

はまた、いくつかのエッジケースでは、それは彼らが提供された方法でそれを注文しない、順序に関するbug in Chromeがあることに注意してください。それが将来変化する限り、これが標準の一部になっていると私は考えているので、実際にはチャンスはかなり小さいので、これをサポートするものが公式になるだけです。

すべてのことが考慮されますが、実際に、本当に、絶対に、確実に正しい配列になるようにするには、配列を使用する必要があります。それ以外の場合は上記のとおりです。

関連質問:Elements order - for (… in …) loop in javascript

+0

しかし、将来は? –

+1

オブジェクトプロパティの列挙命令ではECMAScript 5仕様になっていないと言われていますが、Chromeはその動作が速くて、他のブラウザもこれに従っているので、@ the_drowの懸念は十分に確立されました。 –

2

グレート質問:それは基本的な優雅さの問題だけだったので最初は私だけ...

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

しかし、いくつかの方法が醜い「と感じた」ことをしました。私はfor-inループで反復する以外の方法は知らない。あなたは一度だけ反復する必要があります。安全のため、それが既知のプロパティであることを確認してください[more info]。

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

あなたがプロパティ名ではなく、それらの値を反復していることを余分に明確にするを編集。

14

"最初の"プロパティはありません。オブジェクトのプロパティは順序付けられていません。

JSエンジンが最初に提供すると決めたものをループで取得できます。

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

…順序が重要な場合は、オブジェクトではなく配列を使用します。

+1

あなたが指定した順序であることが保証されていないという良い点 - upvoted。私は必ずhasOwnProperty()をチェックすることを確認します。 –

+0

私はJSONオブジェクトを取得しているので、配列は実際にはオプションではありません... – peirix

+1

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

1

のjQueryを使用して、あなたはまた、JSONオブジェクトを反復処理するために$.eachを使用することができます。あなたの代わりに配列を使用することはできませんクリーナーIMO 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

なぜこれが答えであるのか、なぜあなたのものが他のものよりも優れているのかについての小さな説明を書く方が良いでしょう。 –

+0

私が理解しているように、Object.keys(jsonObj)は、[]表記を使ってアクセスできるオブジェクトのキーの配列を作成します。 [0]は配列の最初の項目です。これをjsonObjectのキールックアップ(独自の角括弧の中に)として追加することは、本質的にこれを言います。 "オブジェクトのすべてのキーの配列を作る、私にこれらの最初のものを与えて、元のオブジェクトでそのキーの値を調べる"。 – Squidinker

+0

私は実際にこれをより好きです – Rikku121

関連する問題