У меня проблема, у меня есть код, который работает на 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;
}
журнал в компоненте возвращает мне это:
Я не знаю, что это за тип данных, я предполагаю, что это массив объектов , Проблема в том, что тот же код компонента не работает на vs c, я думаю, потому что тип данных не совпадает. Это журнал vs c code
Это явно массив объектов. Но также и код 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();