J'ai un composant et un service:
Composant:
export class WebUserProfileViewComponent {
persons: Person [];
personId: number;
constructor( params: RouteParams, private personService: PersonService) {
this.personId = params.get('id');
this.persons = this. personService.getPersons();
console.log(this.personId);
}
}
Un service:
@Injectable()
export class PersonService {
getPersons(){
var persons: Person[] = [
{id: 1, firstName:'Hans', lastName:'Mustermann', email: '[email protected]', company:'Test', country:'DE'},
{id: 2, firstName:'Muster', lastName:'Mustermann', email: '[email protected]', company:'test', country:'DE'},
{id:3, firstName:'Thomas', lastName:'Mustermann', email: '[email protected]', company:'test', country:'DE'}
];
return persons;
}
}
Je veux obtenir l'élément de personne avec l'identifiant ('personID'). Le personID que je reçois de Routeparam. Pour cela j'ai besoin de la boucle foreach? Mais je n'ai pas trouvé de solution à cela.
Merci d'avance!
Vous devez utiliser la méthode Array.filter
:
_this.persons = this.personService.getPersons().filter(x => x.id == this.personId)[0];
_
ou Array.find
_this.persons = this.personService.getPersons().find(x => x.id == this.personId);
_
Supposons que j'ai un tableau ci-dessous:
Skins[
{Id: 1, Name: "oily skin"},
{Id: 2, Name: "dry skin"}
];
Si nous voulons obtenir un article avec Id = 1
et Name = "oily skin"
, nous allons essayer comme ci-dessous:
var skinName = skins.find(x=>x.Id == "1").Name;
Le résultat retournera que le nom de la peau est "peau grasse".
S'il vous plaît faire un essai, Merci et meilleure considération!
Transformez la structure de données en carte si vous utilisez fréquemment cette recherche
mapPersons: Map<number, Person>;
// prepare the map - call once or when person array change
populateMap() : void {
this.mapPersons = new Map();
for (let o of this.personService.getPersons()) this.mapPersons.set(o.id, o);
}
getPerson(id: number) : Person {
return this.mapPersons.get(id);
}
à partir de TypeScript, vous pouvez utiliser la méthode native filter () du tableau JS:
let filteredElements=array.filter(element => element.field == filterValue);
il retourne un tableau avec seulement les éléments correspondants du tableau d'origine (0, 1 ou plus)
Référence: https://developer.mozilla.org/it/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
Utilisez ce code dans votre service:
return this.getReports(accessToken)
.then(reports => reports.filter(report => report.id === id)[0]);