2012-03-18 82 views
3

以JavaScript對象有4個屬性:JavaScript for循環,但反向?

function Object() { 
    this.prop1; 
    this.prop2; 
    this.prop3; 
    this.prop4; 
} 

var obj = new Object(); 

我使用的(在)循環檢查每個屬性,因爲我不知道該屬性的編號或名稱:

for(property in obj) { 
    var prop = obj[property]; 
} 

但是我想處理最後一個屬性(在本例中是prop4)。我想我想要一個反向循環。

我該怎麼做?

感謝, 傑克

添加:我所指的對象從JSON.parse的一個返回。這些屬性似乎始終是有序的。沒有keys()方法。

+0

只需使用一個數組。 – delnan 2012-03-18 21:24:52

+3

對象沒有任何順序。你的問題的前提是無效的。 – Incognito 2012-03-18 21:25:30

+0

你實際上是在調用你自己的對象'Object'嗎?這可能會導致問題,因爲系統中的每個新對象都會嘗試從中繼承。 – dwerner 2012-03-18 21:25:47

回答

12

A for (x in y)不以任何特定順序處理屬性,因此您無法依賴任何所需順序。

如果您需要按特定順序處理屬性,則需要將所有屬性都放入數組中,對數組進行適當排序,然後按照所需順序使用這些鍵。

使用ES5(或ES5墊片),你可以得到所有的屬性與數組:

var keys = Object.keys(obj); 

然後,您既可以在標準詞彙順序或排序使用自定義功能進行排序:

keys.sort(fn); 

而且,那麼你可以訪問他們所需的順序:

for (var i = 0; i < keys.length; i++) { 
    // process obj[keys[i]] 
} 
+0

也不保證順序的一致性...... – jondavidjohn 2012-03-18 21:26:07

+0

而且你應該使用Object.keys'方法,或者至少檢查該屬性是不是用'obj.hasOwnProperty(prop)'繼承的' – Saebekassebil 2012-03-18 21:27:29

+0

對象I我指的是從JSON.parse返回的那個。這些屬性似乎始終是有序的。沒有keys()方法。 – Jack 2012-03-19 19:16:06

1

的ECMAScri pt標準沒有定義for in循環的迭代順序。如果要對數據類型進行排序,您將需要一個數組。

2

數組是有序的對象。對象中的屬性本身是無序的。但是,如果你有,你想從後無論for..in結構將產生前工作的一些具體的原因,你可以這樣做:

var arr = []; 
for (prop in obj) { 
    arr.push(prop); 
} 

for (var n=arr.length; n--;){ 
    var prop = obj[arr[n]]; 
}