Safari не сортирует массив таких объектов, как другие браузеры
var myArray = [{date:"2013.03.01"},{date:"2013.03.08"},{date:"2013.03.19"}];
Я пытался:
function(a,b){
return b.date > a.date;
}
а также
function(a,b){
return b.date - a.date;
}
Консоль.log в Chrome и Firefox дает мне желаемый результат:
"2013.03.19", "2013.03.08", "2013.03.01"
но Safari дает исходную сортировку:
"2013.03.01", "2013.03.08", "2013.03.19"
Зачем?
Ответы
Ответ 1
Функция сортировки в JavaScript должна возвращать действительное число - не true или false, ни строку, ни дату. Является ли это число положительным, отрицательным или нулевым, влияет на результат сортировки.
Попробуйте эту функцию сортировки (которая также будет правильно сортировать любые строки в обратном алфавитном порядке):
myArray.sort(function(a,b){
return (b.date > a.date) ? 1 : (b.date < a.date) ? -1 : 0;
});
Ответ 2
"2013.03.01"
- это не дата. Это строка.
Чтобы правильно сортировать по датам, вам необходимо преобразовать их в даты (временные метки).
var myArray = [{date:"2013.03.01"},{date:"2013.03.08"},{date:"2013.03.19"}];
myArray.sort(function(a,b){
return Date.parse(b.date) - Date.parse(a.date);
});
Вы также можете сортировать их, используя прямые сравнения строк:
myArray.sort(function(a,b){
return b.date.localeCompare(a.date);
});