2013-01-10 52 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