我有一个列表框,它填充了我页面上的一个列表框。填充它的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会对数字键进行排序,所以我的列表框会向后填充所有内容。
我尝试提取散列的第二部分(就像在所有以“name”开头的对象中一样)。显然,在键和散列中都使用了id。我的想法是向一个对象数组提供所有的值对象,然后对名称进行排序。然后创建一个新的散列,使用该对象数组中的id作为键,该数组作为值(希望这是有意义的)。这是最好的方法吗?由于框架和现有代码的原因,我必须使用这种结构。
发布于 2013-01-10 09:54:37
您可以使用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。
https://stackoverflow.com/questions/14249030
复制相似问题