2011-10-13 46 views
1

理論上,不能保證迭代對象屬性的順序。在實踐中,它有一個事實上的標準。 IE < 9,Firefox,Safari總是按照定義的順序迭代。 Opera,IE9,Chrome按字符串鍵的定義順序迭代。 數字鍵變爲排序並在字符串鍵之前。如何按定義的順序迭代數值命名的對象屬性?

我有一個對象填充數組,所有的鍵都是數字。我怎樣才能以定義的順序遍歷這些對象屬性。在ie9和chrome中,數字鍵總是在迭代之前排序。

+0

但關鍵在對象中的數組,我怎樣才能從一個數組中獲得一個對象鍵。我嘗試過(key in ary){document.write(ary [key] +「
」); } 結果就像[對象對象] [對象對象] [對象對象]有沒有什麼好辦法得到關鍵? – user843812

+0

我在下面的答案中提供了示例代碼。 – jfriend00

+0

我剛剛使用console.log()來追溯結果,發現我所需要的實際上是通過對象填充數組中的對象的第二個屬性對數組進行排序。例如,在頁源代碼中,像[61230,'61230','Apple','YES'], [42689,'42689','Banana','YES'], [52668 ,'52668','Orange,Julian','是']我想按字母順序排列名稱'Apple','Banana','Orange'。在FF和ie <9中,它們是,但在chrome和ie9中,這個數組按照數字排序,這意味着結果會打印出來,如「香蕉」,「橙色」和「蘋果」。如何獲得正確的順序 – user843812

回答

3

以任何保證的方式做到這一點的唯一方法是將所有的關鍵字放入一個數組中,對數組進行排序,然後使用該數組迭代。

下面是一些僞代碼:

var obj = {}; // object with lots of properties 
var keys = []; 
for (var i in obj) { 
    if (obj.hasOwnProperty(i)) { 
     keys.push(i); 
    } 
} 

// may have to craft a custom sort function to get the right order 
keys.sort(); 
for (i = 0; i < keys.length; i++) { 
    // operate on obj[keys[i]] 
} 

編輯:基於新的評論,現在聽起來像OP要排序使用第三元素內部數組中數組的數組作爲排序鍵。所以,如果您有:

[[52668,'52668','Orange, Julian','YES'], [61230,'61230','Apple','YES'], [42689,'42689','Banana','YES']] 

,他希望通過水果的名稱(內部數組中的第3項)

這可以這樣進行排序:

var data = [[52668,'52668','Orange, Julian','YES'], [61230,'61230','Apple','YES'], [42689,'42689','Banana','YES']]; 

data.sort(function(a, b) { 
    return(a[2].localeCompare(b[2])); 
});