我写了一个Javascript应用程序,我不认为任何现代浏览器会有任何问题,但是当我测试它时,它适用于Chrome,Safari,Opera,甚至IE ......但不是Firefox。
这是有问题的那种:
var sorted = Object.keys(teams).sort(function(a, b) {
return -(teams[a][sortBy] < teams[b][sortBy])
});
这是我演示的JSfiddle - http://jsfiddle.net/Aq6sc/1/
小提琴应该做的是,当你点击其中一个类别时,它应该显示3个“列”。团队名称,类别名称和类别值。它们应按类别值升序打印。除了Firefox之外,它在每个浏览器中都有。
答案 0 :(得分:2)
如果左操作数在排序顺序中位于右操作数之前,则比较函数应返回负数,如果右操作数首先出现,则返回正数,如果相等,则返回0。您的函数只返回-1或0.使用此:
var sorted = Object.keys(teams).sort(function(a, b) {
var l = teams[a][sortBy], r = teams[b][sortBy];
return (l < r) ? -1 : ((l > r) ? 1 : 0);
});
这是一个行为完全相同但可能被认为更具可读性的版本:
var sorted = Object.keys(teams).sort(function(a, b) {
var l = teams[a][sortBy], r = teams[b][sortBy];
if (l < r) { return -1; }
if (l > r) { return 1; }
return 0;
});
答案 1 :(得分:0)
问题是在排序比较功能中,您使用-
来反转结果。如果您使用!
,它应该可以正常工作。
var sorted = Object.keys(teams).sort(function(a, b) {
return !(teams[a][sortBy] < teams[b][sortBy])
});
或者你可以删除not而只是反转比较
return (teams[a][sortBy] > teams[b][sortBy])