Я работаю с массивом объектов в Javascript и мне нужно отсортировать их по дате и времени.Вот настройки:
место
- название
- дата (необязательно)
- время (необязательно)
Концептуально приложение позволяет пользователям создавать список мест, которые они планируют посетить.Массив событий сначала упорядочивается вручную, и пользователи могут при желании добавлять значения даты и времени к местам.Я предоставляю кнопку для сортировки по дате ... места с нулевыми датами должны быть размещены внизу списка.
В настоящее время в разных браузерах все по-другому.Вот код (предположим, у меня есть дескриптор массива _places и объекта _list):
var _orderByDate = function (e) {
YUE.preventDefault(e); // yui
_places.sort(function (a, b) {
var dateA = new Date(a.date),
dateB = new Date(b.date);
if ((!dateA === null) && (dateB === null)) return 0; //they're both null and equal
else if ((dateA === null) && (dateB != null)) return -1; //move a downwards
else if ((dateA != null) && (dateB === null)) return 1; //move b downwards
else if ((dateA == dateB)) return (a.time > b.time) ? 1 : ((b.time > a.time) ? -1 : 0);
else return (dateA > dateB) ? 1 : ((dateB > dateA) ? -1 : 0);
});
_list.updatePlaces(_places);
}
Если вы узнаете приведенный выше код сортировки, это потому, что я получил основы из другого поста, но я почувствовал этоодин заслуживает своего, поскольку он имеет дело с датами ... другой просто имел дело с нулевыми значениями и текстом.
В любом случае, в Chrome список, кажется, сортируется в случайном порядке, и он продолжает сортировать по-разному каждыйраз я выполняю функцию _orderByDate.В Safari он сортируется в основном правильно с первого раза, но ставит одно нулевое место даты в верхней части списка.В Firefox вообще ничего не происходит.
Я немного новичок, и у меня совсем нет опыта работы с CS, поэтому я не очень разбираюсь в основах, таких как массивы, даты, времяи т.д ... и мои навыки отладки ограничены консолью Firebug.Об ошибках не сообщается, поэтому я действительно понятия не имею, что происходит.
Одна вещь, на которую следует обратить внимание, если я исключу тип даты из функции, чтобы он сортировал элементы как строки, он работал правильно ...но это означает, что 1/10/2011 будет сортироваться до 01.01.2011, поэтому я думаю, что мне нужен там тип даты.
Есть идеи, что происходит не так?Есть ли более умный способ сделать то, что я пытаюсь сделать?
РЕДАКТИРОВАТЬ: Добавление значений журнала
Первый вид (Chrome):
- 08/01/2010
- null
- null
- 08.03.2013
- null
- null
- null
- null
- 7/01 /2010
- null
- null
- null
Второй сорт (хром):
- 08/01 /2010
- null
- null
- null
- 07/01/2010
- null
- null
- null
- null
- null
- 8/03/2010
- null
- null