Angular 中的 OrderBy 日期管道?

OrderBy date pipe in Angular?

我有管道按日期 属性.

按数组排序

问题是并非每个元素在 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();
      }
    });
  };
}

如何将没有日期的属性移动到列表底部?

您可以为排序函数添加另一个 return 值:如果 a 没有日期,return -1。如果 b 没有日期,return 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();
      }
    });
  };

(方向未实施)。