2009-07-12 53 views
16

有沒有辦法獲取JSON對象的第一個屬性的名稱?獲取第一個JSON屬性

我想要做這樣的事情:

var firstProp = jsonObj[0]; 

編輯:我得到陣列的JSON對象至極保持類別,有圖像的URL。

像這樣:

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

我再通過迭代對象插入圖片,以及所有我真正想要的是看哪一類第一次插入一種優雅的方式。起初,我只是做了

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

但是,一些如何「感覺」醜......所以這基本上是一個優雅的問題:對

+1

你不能使用數組呢? – Gumbo 2009-07-12 19:37:39

+0

dupe:http:// stackoverflow。com/questions/909003/javascript-getting-the-first-index-of-an-object/909044#909044 – Miles 2009-07-12 20:05:51

回答

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

2

大問題。除了在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()。 – 2009-07-12 19:34:48

+0

我得到一個JSON對象,所以數組並不是一個真正的選項... – peirix 2009-07-12 19:39:33

1

當使用jQuery,你也可以使用$.each遍歷JSON對象。看起來比較清爽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]]);