Как отобразить значение объекта в наблюдаемый массив - PullRequest
0 голосов
/ 01 мая 2019

Я получаю объект JSON из запроса http get, в котором в качестве значения свойства указан массив объектов.Поскольку я новичок в Angular 7 и Rxjs, я не могу понять, как сопоставить массив моим объектам.

Я получаю данные обратно как любые, что возвращает данные, чтобы убедиться, что оничто я хочу.Я получил массивы объектов обратно из другого API, но они не были в атрибуте значения родительского объекта.Когда я использую сообщение касания консоли, я вижу, что я хочу передать в мой массив объектов, но я не знаю синтаксис сопоставления.

Ниже приведен JSON, который я получаю отМетод getTfsUsers () из моего user.service.ts.

Ниже этого класса (assignee.ts) я хочу отобразить данные на.

Я бы хотел, чтобы getTfsUsers () возвратилнаблюдаемый массив объектов Assignee для

{
    "@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;
}

Есть ли способ сопоставить атрибут значения из объекта, возвращаемого массиву Assignees?

1 Ответ

1 голос
/ 01 мая 2019

Вы можете использовать оператор 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); })
      );
  }
...