以下是我的模型。
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 => {
,并使用rxjs
运营商相同的。
的问题是为了提高我的rxjs
运营商因此溶液应使用rxjs运营商的理解。
答案 0 :(得分:1)
这取决于您要最终返回的值是什么,即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(...))
很好。