2014-01-11 7 views
0

Я написал приложение Javascript, которое, как я думал, не имеет проблем с современным браузером, но когда я его тестировал, он отлично работал с Chrome, Safari, Opera и даже IE ... но не Fire Fox..sort не работает с 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.

ответ

1

Ваша функция сравнения должна возвращать отрицательное число, если левый операнд предшествует правого в порядке сортировки, положительное число если правый операнд приходит первым, а 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; 
}); 
+0

Yikes, это сложно! Но это работает! Отличная работа! –

+0

Странная вещь, как на firefox 20.0.1, так и на 26.0, ваш jsfiddle отлично работает для меня. – Noishe

+0

@DanGoodspeed Я добавил версию, которая длиннее, но может быть немного легче понять. – JLRishe

0

Проблема в том, что в функции сравнения сортировки вы используете -, чтобы отменить результат. Если вы используете !, он должен работать нормально.

var sorted = Object.keys(teams).sort(function(a, b) { 
    return !(teams[a][sortBy] < teams[b][sortBy]) 
}); 

Или вы можете удалить не так и просто обратить вспять процесс Comparision

return (teams[a][sortBy] > teams[b][sortBy]) 
+0

Оба эти модификации заставляют сортировку перестать работать в IE. – JLRishe

+0

Изменение «-» на «!» вызывает сортировку для каждого браузера. –

+0

Есть ли еще разрыв, если вы добавите недостающую точку с запятой? возвращение! (Команды [a] [sortBy] <команды [b] [sortBy]); – Noishe

Смежные вопросы