как сопоставить массив наблюдаемых объектов и свойств (полей) только свойствам? - PullRequest
0 голосов
/ 15 октября 2018

В настоящее время я получаю ответ от сервера в этой форме.

{
    plateNumber: string;
    vehicleId: number;
    garage: {
        garageName: string;
    };
    vehicleType: {
        vehicleType: string;
    };
    vehicleStatus: {
        status: string;
    };
    vehicleModel: {
        vehicleModelName: string;
    };
    vehicleOwner: {
        ownerName: string;
    };
    contactPhone: number;
    techInspectDueDate: Date;
    additionalInfo: string;
    lastDriver: string;
}

, но хочу получить только свойства (поля).Имеются в виду только строки и числа.

{
    plateNumber: string;
    vehicleId: number;
    garageName: string;
    vehicleType: string;
    status: string;
    vehicleModelName: string;
    ownerName: string;
    contactPhone: number;
    techInspectDueDate: Date;
    additionalInfo: string;
    lastDriver: string;
}

В настоящее время я использую HTTP-ответ для получения объектов с сервера.

 getVehicles(): Observable<Vehicle[]> {
    const url = `${this.serviceUrl}`;
    return this.http.post<Vehicle[]>(url, {} );
  }

Мне нужно отобразить ответ при проверке, еслиОбъект имеет эти определенные поля (vehicleType, status, vehicleModelName, ownerName, garageName). Как мне отобразить ответ, если я не уверен, есть ли у этих полей эти поля или это уже нужное мне значение (например, plateNumber)?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Используйте карту и возвращайте все, что вы хотите.

 getVehicles(): Observable<Vehicle[]> {
    const url = `${this.serviceUrl}`;
    return this.http.post<Vehicle[]>(url, {}).pipe(
      map(vehicles => vehicles.map(vehicle => {
        return {
          plateNumber: vehicle.plateNumber;
          vehicleId: vehicle.vehicleId;
          garageName: vehicle.garage.garageName;
          //...map all other fields manually
        };
      })),
    );
  }
0 голосов
/ 15 октября 2018

Возможно, вы захотите рассмотреть решение по этим направлениям

getVehicles().pipe(
  map(vehiclesArray => vehiclesArray.map(vehicle => getProperties(vehicle))
  )
)

, где getProperties - это метод, который вы должны написать, который возвращает объект, который вы хотите иметь.

Учтите, чтопервое вхождение map - это конвейерный оператор, предлагаемый RxJS, а второе - метод Array.

Вы также должны решить, как вести себя в случае, если вы не найдете нужные свойства.

...