IT이야기

객체 배열의 각도 RxJS 관측 가능 필터

cyworld 2022. 3. 19. 12:14
반응형

객체 배열의 각도 RxJS 관측 가능 필터

나는 Angul과 Observable에 익숙하지 않다.나는 객체 배열에 필터를 적용하고 싶다.내 암호는 이렇게 생겼어.

getReport()는 모든 보고서를 얻는다.

 getReports(): Observable<IReport[]>  {
    console.log("in get Reports Service Call");
    return this._http.get<IReport[]>(this.URL)
      .pipe(
        tap(data => console.log('All Data Retrieved - ' + JSON.stringify(data))),
        catchError(this.handleError));
  }

보고서 이름을 기준으로 필터링하고 IReport 배열을 줄 수 있는 다른 방법을 쓰려고 한다.이게 내가 지금 가지고 있는 거야.

 getReportDetails(name : string) : Observable<IReport[]>
  {
    return this.getReports().pipe(
      map((reports : IReport[]) => reports.find(p => p.reportName === name))
    );
  }

에 오류가 있다.

Type 'Observable<IReport>' is not assignable to type 'Observable<IReport[]>'.

5가지 속성을 가진 IReport 인터페이스 입니다.

export interface IReport {
    date: Date;
    reportName: string;
    reportLink: string;
    reportStatus: string;
    region: string;
  }

내가 뭘 잘못하고 있는 거지?모두 고마워.

그래야 한다고 생각한다.

map((reports : IReport[]) => reports.filter(p => p.reportName === name))

대신에

map((reports : IReport[]) => reports.find(p => p.reportName === name))

find첫 번째 것을 돌려줄 것이다.IReport조건에 맞는p.reportName === name

그냥 바꿔서 해 봐.find와 함께filter, find는 하나의 객체만을 얻는 것이고, filter는 객체 배열을 얻는 것이다.

getReportDetails(name : string) : Observable<IReport[]>
  {
    return this.getReports().pipe(
      map((reports : IReport[]) => reports.filter(p => p.reportName === name))
    );
  }

반환된 데이터를 필터링하기 위한 더 나은 솔루션은 rxjs 필터 연산자가 될 것이다.

https://www.learnrxjs.io/operators/filtering/filter.html 그러면 당신은 쉽게 그것을 관찰할 수 있는 오래된 자료로 파이프를 칠하고 당신이 구독할 수 있는 여과된 데이터를 반환할 수 있다.

참조URL: https://stackoverflow.com/questions/52263374/angular-rxjs-observable-filter-on-array-of-objects

반응형