Есть у меня репозиторий номеров журналов на CouchDB по ней есть map-reduce -> post-process (list function), который вываливают понятный клиентской программе JSON со списком номеров; номера имеют дату выхода в формате dd.mm.yyyy (дата храниться как строка). В старой версии номера сортировались на сервере. Дата на чиселки билась примерно так:
date.split('.').map(function(x) { return parseInt(x) })
Теперь попробуйте эту строчку повбивать, например, в консоли Chrome/Safari/etc:
вначале на | 01.10.2011 |
потом на | 02.10.2011 |
и так до | 07.10.2011 |
а потом | 08.10.2011 |
И получаем совершенно внезапно НЕ ТО. Тоже самое с 09; с 10 всё уже ок, как и с 8 и 9.
Сегодня (08.08.2011) вышел новый номер и неправильно отсортировался. А теперь, кто не знает, может погуглить как работает parseInt
Кстати говоря, следующий код работает полностью корректно, что наталкивает на ответ
date.split('.').map(function(x) { return parseInt(x, 10) })
Типичный пример лютого нарушения принципа "наименьшего удивления". Собственно весь Javascript - пример нарушения этого принципа. За такоё по-моему надо убивать.
Комментариев нет:
Отправить комментарий