HttpClient GET 转换对象的响应数组
HttpClient GET transform response array of Objects
以下是我的模型。
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 运算符。
这取决于您希望最终 return 值是什么,即 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(...))
没问题。
以下是我的模型。
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 运算符。
这取决于您希望最终 return 值是什么,即 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(...))
没问题。