Jak uzyskać pierwszy obiekt tablicy z API zadzwonić i przekształcić pierwszy obiekt tablicy zgodnie z MyModel i przekazać obiekt do funkcji Assemblemymodel w RXJS?

Wezwanie API zwraca więcej niż jeden obiekt w tablicy. Potrzebuję pierwszego obiektu. Jestem w stanie przekształcić dane, ale przekształcę całą tablicę. Muszę przekształcić pierwszy obiekt, a następnie przejść transformowany obiekt do funkcji AssembleMymodel.

Dane próbki API:

   data: [
    {
      "vehicleYear": 2016,
      "vehiclemake": "zzz",
      "vehicleequipmentTypeName": "a123",
      "vehicleequipmentType": "aaa",
      "vehiclemodel": "1234",
      "vehiclevinPrefix": "abcd1"
    },
    {
      "vehicleYear": 2017,
      "vehiclemake": "zzz",
      "vehicleequipmentTypeName": "a123",
      "vehicleequipmentType": "aaa",
      "model": "1234",
      "vehiclevinPrefix": "abcd2"
    },
    {
      "vehicleYear": 2018,
      "vehiclemake": "zzz",
      "vehiclevehicleequipmentTypeName": "a123",
      "vehicleequipmentType": "aaa",
      "model": "1234",
      "vehiclevinPrefix": "abcd3"
    }
  ]

Mój kod:

 getData$(model: string): Observable<myModel> {
    return this.http
      .get(`${this.path/model=${model}`)
      .pipe(
        map(({ data}: any) => {
          return data
            .map(item => {
              return {
                year: item.vehicleYear,
                make: item.vehiclemake,
                model: item.vehiclemodel,
                equipmentType: item.vehicleequipmentType,
                vinPrefix: item.vehiclevinPrefix
              } as myModel;
            })
        })
      );
  }
  
  
    protected assembleMyModel(o: any): myModel {
    return {
      year: o.year,
      make: o.make,
      model: o.model,
      equipmentType: o.equipmentType,
      vinPrefix: o.vinPrefix
    } as myModel;
  }
  
  
  
0
Karim Ali 21 marzec 2021, 04:14

2 odpowiedzi

Najlepsza odpowiedź

Myślę, że daleko od tego, co chcesz, może być następujące

getData$(model: string): Observable<myModel> {
    return this.http
      .get(`${this.path/model=${model}`).pipe(
        map((resp) => resp.data[0] as Vehicle),
        map(firstVehicle => assembleMyModel(firstVehicle))
      )
}

Tutaj stackBlitz, aby zobaczyć kod z symulowanym połączeniami HTTP).

1
Picci 21 marzec 2021, 10:19

Dodaj [0] po pierwszej {x1}}

końcowe wyjście:

getData$(model: string): Observable<myModel> {
    return this.http
        .get(`${this.path/model=${model}`)
        .pipe(
            map(({ data }: any) => {
                return data.map(item => {
                    return {
                        year: item.vehicleYear,
                        make: item.vehiclemake,
                        model: item.vehiclemodel,
                        equipmentType: item.vehicleequipmentType,
                        vinPrefix: item.vehiclevinPrefix
                    };
                })[0] as myModel;
            })
        );
}

Roboczej demonstracji w Stackblitz.

0
Zunayed Shahriar 21 marzec 2021, 10:11