2013-01-10 91 views
0

我有一個列表框正在填充我的頁面上的列表框。用於填充它看起來很多像這樣的JavaScript哈希:排序數組/對象/哈希正在填充Chrome列表框

wiget_cont = ({"39":{"name":"astronaut","id":"39","weight":"189"}, 
       "37":{"name":"corgi","id":"37","weight":"10"}, 
       "49":{"name":"zoologist","id":"49","weight":"313"}}); 

在IE和Firefox,列表框填充基於關閉名鍵的值的字母順序排列的。當然,chrome會根據數字鍵進行排序,所以我的列表框會填充所有的屁股。

我試圖把哈希的第二部分(如所有以「name」開頭的對象)。該id顯然在密鑰和哈希中都使用。我的想法是爲所有值對象提供一個對象數組,然後從名稱中排序。然後使用該對象數組中的id作爲鍵創建一個新的散列,並將該數組作爲值(希望這有些道理)。這是做這件事的最好方法嗎?由於框架和現有的代碼,我必須使用這種結構,進出。

回答

1

您可以通過在名稱中使用Object.keys得到一個數組,然後排序後

var wiget_cont = ({"39":{"name":"astronaut","id":"39","weight":"189"}, 
       "37":{"name":"corgi","id":"37","weight":"10"}, 
       "49":{"name":"zoologist","id":"49","weight":"313"}}); 

var keys = Object.keys(wiget_cont).sort(function (a, b) {return wiget_cont[a].name>wiget_cont[b].name;}), 
    i = 0; 

for (;i<keys.length;++i) { /* wiget_cont[keys[i]] ... */ } 

遍歷它,如果你不想使用>進行字符串比較,看看.localeCompare