HttpClient的GET变换对象的响应阵列

问题描述 投票:0回答:1

以下是我的模型。

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运营商。

angular6 angular-httpclient rxjs6
1个回答
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(...))是罚款。

© www.soinside.com 2019 - 2024. All rights reserved.