如何将对象值映射到可观察数组

时间:2019-05-01 18:59:30

标签: angular service rxjs

我正在从http get请求接收一个JSON对象,该请求的value属性中包含我想要的对象数组。由于我是Angular 7和Rxjs的新手,所以我不知道如何将数组映射到我的对象。

我将所有数据取回,这将带回数据,以验证它是否是我想要的。我已经从其他API获得了对象数组,但是它们尚未位于父对象的value属性中。当我在控制台上使用tap消息时,我看到了要推送到对象数组的内容,但是我不知道映射语法。

下面的JSON是我从user.service.ts的getTfsUsers()方法获取的信息。

下面是我要将数据映射到的类(assignee.ts)。

我希望getTfsUsers()来回返回可观察的受让人对象数组

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#directoryObjects(displayName,mail)",
    "@odata.nextLink": "https://graph.microsoft.com/v1.0/groups/blahblah",
    "value": [
        {
            "@odata.type": "#microsoft.graph.user",
            "displayName": "Deer, John",
            "mail": "deer.john@myplace.org"
        },
        {
            "@odata.type": "#microsoft.graph.user",
            "displayName": "Doe, Jane",
            "mail": "doe.jane@myplace.org"
        },
        {
            "@odata.type": "#microsoft.graph.user",
            "displayName": "Fawn, Mike",
            "mail": "fawn.mike@myplace.org"
        }
     ]
}


getTfsUsers(): Observable<any>{
    const uri = `${this.groupsBaseUri}/${this.tfsUsersGroupId}/members/${this.displayNameMailFields}`;
    return this.http.get<any>(uri)
      .pipe(
        catchError((error: HttpErrorResponse) => { return throwError(error); })
      );
  }
export class Assignee {
    mail: string;
    displayName: string;
}

是否可以将值属性从返回的对象映射到受让人数组?

1 个答案:

答案 0 :(得分:1)

您可以为此使用RxJS的map运算符,并将其嵌套在pipe()中。您将需要在服务顶部导入map运算符,如下所示。请注意,它与JavaScript的Array.map()不同。

import { map } from 'rxjs/operators';
.
.

getTfsUsers(): Observable<any>{
    const uri = `${this.groupsBaseUri}/${this.tfsUsersGroupId}/members/${this.displayNameMailFields}`;
    return this.http.get<any>(uri)
      .pipe(
        map(data => data['value'].map(obj => {
          return {
            mail: obj.mail,
            displayName: obj.displayName
          };
        })),
        catchError((error: HttpErrorResponse) => { return throwError(error); })
      );
  }