два разных типа данных - PullRequest
0 голосов
/ 22 апреля 2020

У меня проблема, у меня есть код, который работает на stackblitz .

Компонент

let carTypeReducer = (acc, cur) => ({...acc, [cur.tipo]:(acc[cur.tipo] || 0 ) + 1})

from(this.carsService.getCars()).pipe(
  tap(data=> console.log(data))
  //scan(carTypeReducer,{})
).subscribe();

service:

getCars():Array<Car>{
  let cars:Car[] = [{modello:'X5', tipo:'jeep'},
                    {modello:'Q7', tipo:'jeep'},
                    {modello:'X1', tipo:'jeep'},
                    {modello:'500,', tipo:'citycar'},
                    {modello:'yaris', tipo:'citycar'},
                    {modello:'punto', tipo:'citycar'},
                    {modello:'C3', tipo:'citycar'}];
  return cars;
}

журнал в компоненте возвращает мне это:

enter image description here

Я не знаю, что это за тип данных, я предполагаю, что это массив объектов , Проблема в том, что тот же код компонента не работает на vs c, я думаю, потому что тип данных не совпадает. Это журнал vs c code

enter image description here

Это явно массив объектов. Но также и код stackblitz должен возвращать мне массив объектов. Какая разница между двумя? Как я могу заставить тот же самый код работать и для кода Visual Studio с данными такого типа? Я хотел бы указать, что в vs c данные, которые я получаю из базы данных, не генерируются, как в коде стекаблица. Спасибо! PS Я привязал, чтобы настроить макет, извините.

ОБНОВЛЕНИЕ: я шью форму данных. этот код возвращает меня:

this.subscriptionTypeReducer = from(this.carsService.getCars())
      .subscribe(res => this.outputJSON = res);

форма vs c данные из sql бэкэнд:

[
  {
    "id": 20,
    "model": "Q7",
    "brand": "audi",
    "type": "jeep",
    "price": 70000,
    "image1": "CarsImages/audi_mod1_img1.jpg",
    "image2": "CarsImages/audi_mod1_img2.jpg",
    "image3": "CarsImages/audi_mod1_img3.jpg",
    "userId": 27,
    "username": "paperinik"
  },
  {
    "id": 21,
    "model": "A1",
    "brand": "audi",
    "type": "berlina",
    "price": 22000,
    "image1": "CarsImages/audi_mod2_img1.jpg",
    "image2": "CarsImages/audi_mod2_img2.jpg",
    "image3": "CarsImages/audi_mod2_img3.jpg",
    "userId": 31,
    "username": "paperino"
  },
  {
    "id": 22,
    "model": "X5",
    "brand": "bmw",
    "type": "jeep",
    "price": 67000,
    "image1": "CarsImages/bmw_x5_img1.jpg",
    "image2": "CarsImages/bmw_x5_img2.jpg",
    "image3": "CarsImages/bmw_x5_img3.jpg",
    "userId": 29,
    "username": "gastone"
  },
  {
    "id": 23,
    "model": "SERIE 1",
    "brand": "bmw",
    "type": "berlina",
    "price": 27000,
    "image1": "CarsImages/bmw_serie1_img1.jpg",
    "image2": "CarsImages/bmw_serie1_img2.jpg",
    "image3": "CarsImages/bmw_serie1_img3.jpg",
    "userId": 27,
    "username": "paperinik"
  },
  {
    "id": 30,
    "model": "X1",
    "brand": "bmw",
    "type": "suv",
    "price": 31800,
    "image1": "CarsImages/bmw_x1_img1.jpg",
    "image2": "CarsImages/bmw_x1_img2.jpg",
    "image3": "CarsImages/bmw_x1_img3.jpg",
    "userId": 31,
    "username": "paperino"
  },
  {
    "id": 24,
    "model": "C1",
    "brand": "citroen",
    "type": "CityCar",
    "price": 10000,
    "image1": "CarsImages/citroen_c1_img1.jpg",
    "image2": "CarsImages/citroen_c1_img3.jpg",
    "image3": "CarsImages/citroen_c1_img2.jpg",
    "userId": 30,
    "username": "paperoga"
  },
  {
    "id": 25,
    "model": "C5",
    "brand": "citroen",
    "type": "suv",
    "price": 25000,
    "image1": "CarsImages/citroen_c5_img1.jpg",
    "image2": "CarsImages/citroen_c5_img2.jpg",
    "image3": "CarsImages/citroen_c5_img3.jpg",
    "userId": 28,
    "username": "ziopaperone"
  },
  {
    "id": 35,
    "model": "portofino",
    "brand": "ferrari",
    "type": "sportiva",
    "price": 195000,
    "image1": "CarsImages/ferrari_portofino_img1.jpg",
    "image2": "CarsImages/ferrari_portofino_img2.jpg",
    "image3": "CarsImages/ferrari_portofino_img3.jpg",
    "userId": 28,
    "username": "ziopaperone"
  },
  {
    "id": 26,
    "model": "500",
    "brand": "fiat",
    "type": "CityCar",
    "price": 10900,
    "image1": "CarsImages/fiat_500_img1.jpeg",
    "image2": "CarsImages/fiat_500_img2.jpeg",
    "image3": "CarsImages/fiat_500_img3.jpeg",
    "userId": 29,
    "username": "gastone"
  },
  {
    "id": 29,
    "model": "500 X Lounge",
    "brand": "fiat",
    "type": "suv",
    "price": 21600,
    "image1": "CarsImages/fiat_500XLounge_img1.jpg",
    "image2": "CarsImages/fiat_500XLounge_img2.jpg",
    "image3": "CarsImages/fiat_500XLounge_img3.jpg",
    "userId": 29,
    "username": "gastone"
  },
  {
    "id": 32,
    "model": "ghibli",
    "brand": "maserati",
    "type": "sportiva",
    "price": 71000,
    "image1": "CarsImages/maserati_ghibli_img1.jpg",
    "image2": "CarsImages/maserati_ghibli_img2.jpg",
    "image3": "CarsImages/maserati_ghibli_img3.jpg",
    "userId": 27,
    "username": "paperinik"
  },
  {
    "id": 33,
    "model": "levante",
    "brand": "maserati",
    "type": "suv",
    "price": 75900,
    "image1": "CarsImages/maserati_levante_img1.jpg",
    "image2": "CarsImages/maserati_levante_img2.jpg",
    "image3": "CarsImages/maserati_levante_img3.jpg",
    "userId": 30,
    "username": "paperoga"
  },
  {
    "id": 34,
    "model": "MC20",
    "brand": "maserati",
    "type": "sportiva",
    "price": 200000,
    "image1": "CarsImages/maserati_mc20_img1.jpg",
    "image2": "CarsImages/maserati_mc20_img2.jpg",
    "image3": "CarsImages/maserati_mc20_img3.jpg",
    "userId": 30,
    "username": "paperoga"
  }
]

форма данных макета:

{
  "modello": "C3",
  "tipo": "citycar"
}

мы видим, что с первого мы имеем массив объектов, а с второго - просто объект. Итак, как я могу исправить редуктор для использования в первом случае? редуктор:

let carTypeReducer = (acc, cur) => ({...acc, [cur.type]:(acc[cur.type] || 0) +1 })

    this.subscriptionTypeReducer = from(this.carsService.getCars())
      .pipe(
        scan(carTypeReducer, {})
      ).subscribe();
...