2013-10-18 36 views
2

要循環,你可以做鍵對象落後

for(key in object){ 
    // sth. great... 
} 

是否可以循環使用此方法向後一個對象?提前致謝。

+0

向後建議的命令,但對象沒有一個訂單。 – Andy

+0

你打算迭代一個數組嗎?或者實際上屬性?在前一種情況下,您可以使用向下計數for循環'for(var i = arr.length-1; i> = 0; --i){做某事; }' –

回答

5

這不會是可能的

的ECMAScript的對象是無序物業集合ES3 Specs 0列舉的特性

的力學和順序(在第一算法步驟6.A,在第二步驟中7.A)沒有被指定。

在枚舉過程中,可能會刪除枚舉對象的屬性。如果枚舉過程中尚未訪問的屬性被刪除,則不會被訪問。如果在枚舉過程中將新屬性添加到枚舉對象中,則新增屬性不保證在活動枚舉中被訪問。任何枚舉中的屬性名稱都不能被訪問多次。 ES5 Specs

但是你可以做什麼,是你的目標的關鍵陣列上向後遍歷。 不是這意味着你神奇地給對象一個訂單。

var obj = {a: 0, b:1, c:2}; 
for (var keys=Object.keys (obj),key; key = keys.pop() ;) { 
    console.log (key) // c, b, a. 
} 

3

沒有「前進」和「後退」。 JavaScript中的對象鍵沒有順序。

雖然大多數瀏覽器會按照它們添加的順序遍歷它們,但不能保證,也不是規範的一部分。

所以答案是:不,你不能。


如果你堅持,做到這一點:

var keys = [], key, i; 

for (key in object) { 
    object.hasOwnProperty(key) && keys.push(key); 
} 

i = keys.length; 

while (i--) { 
    // use object[ keys[i] ] 
} 

這裏的小提琴:http://jsfiddle.net/MBpcq/

+0

不錯的'&&'技巧。你有每週有條件的語句限制,你不想超過? :-) – Kos

+0

@Kos - 我只是討厭嵌套的括號,並儘量避免他們像瘟疫。 –

+0

這實際上是JS編程中常見的成語(?),我已經看到它在很多地方使用 –