2013-04-04 95 views
0

我有看起來像這樣的對象。Javascript - 對象,for循環從2開始

foo = { 
    0 : { 
     'bar' : 'baz', 
     'qux' : 'quux', 
     'this' : { 'hello' : 'yes' } // this is the object I want to extract 
    } 
    1 : { 
     'bar' : 'baz', 
     'qux' : 'quux', 
     'this' : { 'hello' : 'yes' } // extract 
    } 
    2 : { 
     'bar' : 'baz', 
     'qux' : 'quux', 
     'this' : { 'hello' : 'yes' }, // extract 
     'that' : { 'hello' : 'no' } // extract 
    } 
} 

用了這樣的循環,我得到遍歷每個對象:

for(var i in foo){ 
    ... 
} 

的問題是,我只是想拉從第三和更大的子對象中的數據比(」這')從每個對象。

+4

對象屬性沒有排序。改用數組。 – VisioN 2013-04-04 09:12:54

+0

對象是無序的。沒有真正的「第一」或「第二」鍵值對的概念。你只是試圖讓所有發生的值都是對象的鍵? – Blender 2013-04-04 09:13:15

+0

如果我總是知道他們會按這個順序來? – Philip 2013-04-04 09:13:59

回答

2

在ECMAscript中沒有指定對象鍵的指定順序。如果您有索引的鍵名,那麼您確實應該使用Javascript Array

如果你需要有一個普通的對象,你可能想使用Object.keys()一起Array.prototype.forEach.sort(),像

Object.keys(foo).sort().forEach(function(i) { 
}); 

如果你不能依靠ES5,你別無選擇但要手動完成這項工作。

var keys = [ ]; 

for(var key in foo) { 
    if(foo.hasOwnProperty(key)) { 
     keys.push(key); 
    } 
} 

keys.sort(); 

for(var i = 0, len = keys.length; i < len; i++) { 
} 

但是,你真的應該只使用一個陣列擺在首位,所以你可以跳過骯髒的工作。

+0

問題是我不能使用Object.keys與IE。 – Philip 2013-04-04 09:15:33

+0

然後使用polyfill。 – elclanrs 2013-04-04 09:16:00

+0

感謝您的解決方案,我認爲我會做一個數組。 =) – Philip 2013-04-04 09:19:48