.sort没有使用Firefox

时间:2014-01-11 04:10:00

标签: javascript

我写了一个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之外,它在每个浏览器中都有。

2 个答案:

答案 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);
});

http://jsfiddle.net/Aq6sc/4/

这是一个行为完全相同但可能被认为更具可读性的版本:

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])