首页 > 解决方案 > 如何将可观察对象和属性(字段)数组映射到属性?

问题描述

我目前正在以这种形式收到来自服务器的响应。

{
    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, {} );
  }

我需要在检查对象是否具有这些特定字段(车辆类型、状态、车辆模型名称、所有者名称、车库名称)时映射响应。当我不确定对象是否具有这些字段或者它是否已经是我需要的值(例如 plateNumber)时,如何映射响应?

标签: arraysrxjsmappingobservable

解决方案


使用地图并返回您想要的任何内容。

 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
        };
      })),
    );
  }

推荐阅读