2010-08-25 58 views
3
var obj = { 
'51' : { 'name':'name1'},  
'66' : { 'name':'name2'},  
'58' : { 'name':'name3'} 
}; 
$(function() { 
    s = ''; 
    $.each(obj, function(k, v) { 
     s += ' '+k; 
    }); 
    alert(s); 
}); 

在IE和Firefox這是51 66 58,但在Opera和Chrome它在Opera,Chrome的51 58 66 爲什麼Jquery.each()排序鍵? 我能做些什麼來保持本機的秩序?問題的JSON

P.S如果數組鍵是一個字符串,導致51J 66J 58J 也許歌劇和鉻嘗試鍵轉換爲整數,其中有可能

var obj = { 
"51j" : { "name":"name1"},  
"66j" : { "name":"name2"},  
"58j" : { "name":"name3"} 
}; 
+0

它的對象鍵,而且他們的字符串無論發生什麼情況。 – Skilldrick 2010-08-25 09:35:16

+0

它似乎歌劇和鉻不這麼認爲.. – ncs 2010-08-25 09:49:01

+0

在JS中,obj [1]和obj ['1']是等價的。然而,正如已經解釋的那樣,for..in迭代的順序沒有被規範所定義。瀏覽器可以以任何順序返回值,並且仍然按照規範「正確」運行。隨着時間的推移,大多數情況下,與網絡和其他瀏覽器的兼容性都會強制執行插入順序,但這仍然不像您發現的那樣可靠。 – hallvors 2010-08-27 03:24:05

回答

9

JavaScript對象是無序的。當你循環它們時,密鑰的出現順序並不能保證,JS引擎可以自由地實現他們喜歡的任何存儲和檢索系統。

如果爲了事項,使用數組:[]

這可以包含對象:

[ 
    { 'foo' : '1234', 'bar' : '5678' }, 
    { 'foo' : 'abcd', 'bar' : 'qwer' }, 
    { 'foo' : 'ldng', 'bar' : 'plma' } 
] 
+0

如果我通過ajax請求得到它? – ncs 2010-08-25 06:27:23

+1

@ncsft:如果您無法更改'JSON',則需要先閱讀並自行排序,然後再進行處理。 – jAndy 2010-08-25 06:31:26