以下是我的模型。
export interface AuditTrail {
logAction:string,
targetEmpId:string,
createdDate:Date
}
下面的代码从一个GET调用检索数据并将其转换。
public getAuditTrails() {
return this.http.get<AuditTrail[]>(this.auditTrailUrl)
.pipe(
map((data :Object[]) => {
return data.map(value => {
const auditTrail:AuditTrail = {
logAction:value["logAction"],
targetEmpId:value["targetEmpId"]["empCode"],
createdDate:value["loggedDateTime"]
}
return auditTrail;
});
})
)
}
此代码的工作好了。但是我的问题是如何避免数组迭代data.map(value => {
and使用rxjs
运营商相同。
现在的问题是为了提高我的rxjs
运营商的理解,因此该解决方案应该使用rxjs运营商。
这取决于你想最终的返回值什么是,即AuditTrail
对象或单个AuditTrail[]
阵列的流。
流:
public getAuditTrails(): Observable<AuditTrail> {
return this.http.get<SomeObject[]>(this.auditTrailUrl).pipe(
flatMap(data => data),
map<SomeObject, AuditTrail>(value => ({
logAction:value["logAction"],
targetEmpId:value["targetEmpId"]["empCode"],
createdDate:value["loggedDateTime"]
})
);
}
以上,flatMap
正在源阵列和在一个新的可观察到的流允许每个单独的产品被传递到随后的发射map
每个值作为一个项目。
阵:
如果你想这将减少到一个数组,你可以管toArray
:
public getAuditTrails(): Observable<AuditTrail> {
return this.http.get<AuditTrail[]>(this.auditTrailUrl).pipe(
flatMap(data => data),
map<SomeObject, AuditTrail>(value => ({
logAction:value["logAction"],
targetEmpId:value["targetEmpId"]["empCode"],
createdDate:value["loggedDateTime"]
}),
toArray()
);
}
就个人而言,我不认为有任何优势,平坦映射和使用map(data = data.map(...))
是罚款。