0

我有一个在我的页面上填充列表框的列表框。填充它的 javascript 哈希看起来很像这样:

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 中,列表框根据 name 键值的字母顺序填充。当然,chrome 对数字键进行排序,所以我的列表框会向后填充所有内容。

我试图取出散列的第二部分(就像所有以“名称”开头的对象一样)。id 显然在 key 和 hash 中都使用了。我的想法是用所有值对象提供对象数组,然后整理名称。然后使用该对象数组中的 id 作为键,将该数组作为值创建一个新的哈希(希望这有一定的意义)。这是最好的方法吗?由于框架和现有代码,我必须使用这种结构,进出。

4

1 回答 1

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.

于 2013-01-10T01:54:37.470 回答