我是Angular和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;
}
我在做什么错?谢谢大家
答案 0 :(得分:4)
我认为应该是
map((reports : IReport[]) => reports.filter(p => p.reportName === name))
代替
map((reports : IReport[]) => reports.find(p => p.reportName === name))
find
将返回与条件IReport
匹配的第一个p.reportName === name
答案 1 :(得分:1)
只需尝试将$tmp = (($a = foo()) === 0 ? $a : bar())->my_property = 1
更改为find
,find将仅获取一个对象,而filter将获取对象数组
filter
答案 2 :(得分:1)
用于过滤返回数据的更好解决方案将是rxjs的过滤器运算符
https://www.learnrxjs.io/operators/filtering/filter.html 然后,您可以轻松地将其传输到较旧的可观察对象,并返回可观察的过滤后的数据,您可以订阅