2012-02-03 6 views
0

Функция javascript array .sort() может принимать необязательный параметр, который позволяет вам определить собственный оператор сравнения. Если вы не предоставите его, сравнение по умолчанию будет применяться между элементами при сортировке массива. например,время сортировки дат погашения

х = [ 'AAAAAAAA', 'BBBBB', 'х', 'дд', 'ZZZ']

[ "AAAAAAAA", "BBBBB", "х", "дд", "ZZZ"]

x.sort()

[ "AAAAAAAA", "BBBBB", "дд", "х", "ZZZ"]

x.sort (функция (а, b) {return a.length> b.length? 1: -1})

["x", "dd", "zzz", "bbbbb", "aaaaaaaa"]

Во втором случае я сортирую по длине строки, а не по умолчанию по умолчанию для лексикографической строки.

Проблема:

У меня есть столбец значений клиентской части, представляющей хороший «WebTwoPointZero» -ified даты. Эти значения могут быть штамп времени - "18/01/2012" или любой из следующих:

  • минут назад
  • 1 минуту назад
  • X минут назад
  • 1 час назад
  • X часов назад
  • Сегодня
  • Вчера
  • X дней назад

Мне нужно иметь возможность сортировать массив любой случайной комбинации этих значений.

ответ

1

Самая большая проблема здесь заключается в написании метода преобразования относительного времени в абсолютное время. После написания метода, который может это сделать, вы можете сортировать данные, сравнивая метки времени.

Чтобы написать такой способ, вам нужно будет каталогизировать и упорядочить все форматы, которые вы готовы принять. После определения форматов вы можете написать ряд регулярных выражений, чтобы идентифицировать их, использовать группы захвата для извлечения любых важных значений, а затем передать эти значения функции, которая будет добавлена ​​или вычтена из текущего времени datetime, на основе таких ключевых слов, как «до 'и' назад 'и расположение этих слов во фразе.

Несмотря на это, это невероятно сложный процесс. Повеселись.

Существует также Stackoverflow question по этому вопросу из нескольких лет назад. Вы можете найти там хороший совет.

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