24

我只想对我的类类型“类别”的可观察数据进行排序。所以 Observable < Category[] > 我想排序。

所以我用它升级到了 Angular6 和 rxjs6。我知道的一个可能很简单的 Typescript 问题是我如何进行“排序”操作,例如:

sort((x,y) => x.description < y.description ? -1 : 1)

在新的 Angular6 内部?我曾经在 5

var response = this.http.get<Category[]>(this.endpoint);
        .map((result: Response) => this.alphabetize(result));


alphabetize = (result: Response) => this.Categories = result.json()
.sort((x,y) => x.description < y.description ? -1 : 1)

它工作得很好。现在在 Angular 希望你使用的 HttpCLIENTModule 和 HttpClient 中它更简单了:

var data = this.http.get<Category[]>(this.endpoint);

我只是将魔术 <(object)> 放在我的端点之前,它为我做了。凉爽的。但是我没有看到您如何轻松地进入对象内部以使用 Source、Pipe、from、of 对其进行排序。我知道这可能很简单,我只是不知道它的语法。

4

2 回答 2

37

这是:

this.http.get<Category[]>(this.endpoint).pipe(
  map(results => results.sort(...))
);

或者由于修改了现有数组,因此在/sort中提供副作用在语义上更正确:dotap

this.http.get<Category[]>(this.endpoint).pipe(
  tap(results => {
    results.sort()
  })
);
于 2018-05-10T15:20:15.247 回答
0

对于 angular12,当我尝试这个解决方案时,它给了我这个错误。

TypeError: Cannot read property ‘sort’ of undefined TypeError: Cannot read property ‘sort’ of undefined

要修复此错误。我用管子

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


@Pipe({
  name: 'sortByDate'
})
export class SortByDatePipe implements PipeTransform {

  transform(value: any, ...args: any[]): any {
    value = [...value]; // fixed to second error

    return value.sort((a, b) => new Date(b.date1).getTime() - new Date(a.date1).getTime());

  }

}

这时它给出了这个。

TypeError: Cannot assign to read only property ‘0’ of object ‘[object Array]’ Error ?

我已经在代码(上面)中解释了这一点,但是如果它不能解决错误,您可以在此处检查。

这是html代码

<div *ngFor="let item of data$ | async | sortByDate">
//your code goes here
</div>
于 2022-02-10T19:32:13.990 回答