Сортировка таблицы по дате с '' - PullRequest
0 голосов
/ 04 сентября 2018

Итак, у меня есть следующий сценарий использования, в котором у меня есть даты и пустые строки в таблице.

Проблема в том, что сортировка не соответствует ожиданиям. Обычно со строками пустая строка помещается сверху или снизу сортировки.

Но с датой это толкает их между собой.

json = ['01-01-2018', '', '04-03-2018', '03-03-2018', '', '04-03-2018', '03-03-2018'];
this.json.sort((obj1: string, obj2: string) => {
  if (new Date(obj1) > new Date(obj2)) { return 1; }
  if (new Date(obj1) < new Date(obj2)) { return -1; }
  return 0;
});

Это приведет к: 01-01-2018,,03-03-2018,04-03-2018,,03-03-2018,04-03-2018.

Вот простой стэк-блиц:

Stackblitz

Я пытался сделать это число своего рода. Но тогда проблема с пустой строкой остается. У any1 есть решение, как решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Проверьте, установлены ли значения:

 sort(){
    this.json.sort((obj1: string, obj2: string) => {
      if (!obj1 ||!obj2) {return -1}
      if (new Date(obj1)> new Date(obj2)) { return 1; }
      if (new Date(obj1)< new Date(obj2)) { return -1; }

      return 0;
    });
  }

результат:

,,01-01-2018,03-03-2018,03-03-2018,04-03-2018,04-03-2018
0 голосов
/ 04 сентября 2018

Вам нужно проверить, можно ли преобразовать значение в тип даты / времени, а затем вернуть -1 или 1 (в зависимости от того, где вы хотите, чтобы они находились), если они не совпадают.

json = ['01-01-2018', '', '04-03-2018', '03-03-2018', '', '04-03-2018', '03-03-2018'];
this.json.sort((obj1: string, obj2: string) => {
  if (obj1 === obj2) { return 0; } // if they are the same then no need to convert these instances to Date types later, just return 0
  if (!obj1) { return 1; } // thruthy check
  if (!obj2) { return -1; } // thruthy check

  if (new Date(obj1) > new Date(obj2)) { return 1; }
  if (new Date(obj1) < new Date(obj2)) { return -1; }
  return 0;
});

stackblitz

// Initial array
'01-01-2018', '', '', '', '04-03-2018', '03-03-2018', '', '04-03-2018', '03-03-2018'

// Sorted array
'01-01-2018', '03-03-2018', '03-03-2018', '04-03-2018', '04-03-2018', '', '', '', ''

На заметку о стороне я рекомендую momentjs вместо Date в javascript. Он намного мощнее, и вы можете включить строку формата в значение, которое вы передаете, чтобы строка была правильно проанализирована.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...