html - Egenskapen 'filter' finns inte på typen 'Object'. När man försöker filtrera svar
Jag försöker hämta data från en json-fil som är lika med spelarens namn i URL:en. Till exempel: localhost:4200/players/Febiven ska endast returnera information om Febiven. Jag använder Angular 6
Hittills har jag denna kod:
player.service.ts
get(ingameName){
return <Observable<Player>> this.http.get(endpoint).map(response =>{
let data = response.filter(item=>{
if (item.ingameName == ingameName) {
return item
}
});
if (data.length == 1){
return data[0]
}
return {}
})
.catch(this.handleError)
}
private handleError(error:any, caught:any): any{
console.log(error, caught)
}
player-info.component.ts
export interface Player {
ingameName: string;
name: string;
intro: string;
image: string;
info: string;
team: string;
dob: string;
earnings: string;
role: string;
game: string;
favourite: string;
IDs: string;
}
export class PlayerInfoComponent implements OnInit {
players: Player[] = null;
private routeSub:any;
private req:any;
ingameName:string;
player : player;
constructor(private route: ActivatedRoute, private plService : PlayerService) { }
ngOnInit() {
this.routeSub = this.route.params.subscribe(params => {
this.ingameName = params['ingameName'];
this.req = this.plService.get(this.ingameName).subscribe(data=>{
this.player = data as player
})
});
Jag får felet 'Property 'filter' does not exist on type 'Object'. Och jag har verkligen ingen idé om hur jag ska fixa detta, jag har tittat på flera svar, men inget verkade fungera för mig. Om någon skulle kunna hjälpa mig att fixa detta fel vore det fantastiskt
Tack
Svar #1
filter finns bara på arrayer. Ditt svar är ett objekt. Du kan göra så här istället:
get(ingameName){
return <Observable<Player>> this.http.get(endpoint).map(response =>{
let data = response.json();
if (data.ingameName == ingameName){
return data;
}
return {};
})
.catch(this.handleError)
}
Svar #2
Prova detta, det kommer att fungera: definiera en parameter inuti din klass och använd den i ngOnInit()-funktionen på detta sätt:
export class VideoDetailComponent implements OnInit, OnDestroy {
data_new:any;
ngOnInit() {
this.http.get("assets/json/videos.json").subscribe(data =>{
this.data_new = data;
this.data_new.filter(item=>{
console.log(item)
// do your work here
})
})
}
}