Заказать по дате трубы в Angular? - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть канал, который сортирует по свойству массив по дате.

Проблема в том, что не у каждого элемента есть дата свойства в args.key. Значит, строки должны быть внизу списка.

import {
  Pipe,
  PipeTransform
} from "@angular/core";

@Pipe({
  name: 'sort'
})
export class ArraySortPipe implements PipeTransform {
  transform(records: Array < any > , args ? : {
    key: string,
    direction: boolean,
    type: "int" | "string" | "date"
  }): any {
    return records.sort(function (a: any, b: any) {
      if (args.type === 'date' && args.direction) {
        return new Date(a[args.key]).getTime() - new Date(b[args.key]).getTime();
      }
    });
  };
}

Как переместить свойства без даты в конец списка?

1 Ответ

1 голос
/ 15 февраля 2020

Вы можете добавить другое возвращаемое значение для функции сортировки: если у a нет даты, вернуть -1. Если b не имеет даты, верните 1.

Как:

  transform(records: Array < any > , args ? : {
    key: string,
    direction: boolean,
    type: "int" | "string" | "date"
  }): any {
    return records.sort(function (a: any, b: any) {
      if (args.type === 'date' && args.direction) {
          if(!a[args.key]) {
              return -1;
          }

          if(!b[args.key]) {
              return 1;
          }

          return new Date(a[args.key]).getTime() - new Date(b[args.key]).getTime();
      }
    });
  };

(направление не реализовано).

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