2016-06-22 9 views
37

Ich habe eine Komponente und einen Service:Angular 2 Typoskript wie Element zu finden in Array

Komponente:

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); 
 
     } 
 
}

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; 
 
     } 
 
}

Ich möchte die Person mit der ID ('personID') bekommen. Die personID erhalte ich von Routeparam. Dafür brauche ich die foreach-Schleife? Dafür habe ich keine Lösung gefunden.

Vielen Dank im Voraus!

+8

Sie können ein Element von Id wie diese persons.find (Person => person.id === PersonId) – tstellfe

Antwort

91

Sie müssen Methode verwenden Array.filter:

this.persons = this.personService.getPersons().filter(x => x.id == this.personId)[0]; 

oder Array.find

this.persons = this.personService.getPersons().find(x => x.id == this.personId); 
+0

Dies ist das finden, was ich suchte. Vielen Dank. – Ortiz

+0

Warum x und nicht x.id? –

+0

@NickN. Du liegst absolut richtig. Es sollte 'x.id' sein –

1

Verwenden Sie diesen Code in Ihren Diensten:

return this.getReports(accessToken) 
     .then(reports => reports.filter(report => report.id === id)[0]); 
5

die Datenstruktur, wenn Sie auf einer Karte Trans Verwenden Sie häufig diese Suche

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); 
} 
-1

nehme ich unterhalb Array:

Taschen [

{Id: 1, Name: "oily skin"}, 
{Id: 2, Name: "dry skin"} 

];

Wenn wir mit Id = 1 und Name = "fettige Haut" erhalten Einzelteil wünschen, werden wir versuchen, wie unten:

var Skinname = skins.find (x => x.cd == „1 ").Name;

Das Ergebnis wird der SkinName ist "Fettige Haut" zurückgegeben.

Bitte versuchen Sie es, danke und beste beachtung!

enter image description here

+0

Vielen Dank für dieses Code-Snippet, das einige begrenzte kurzfristige Hilfe bieten könnte. Eine angemessene Erklärung [würde erheblich verbessern] (// meta.stackexchange.com/q/114762) ist ihr langfristiger Wert, indem sie zeigt * warum * das ist eine gute Lösung für das Problem, und würde es für zukünftige Leser mit mehr nützlich machen andere, ähnliche Fragen. Bitte [bearbeiten] Sie Ihre Antwort, um einige Erklärungen hinzuzufügen, einschließlich der Annahmen, die Sie getroffen haben. –

+0

Dies liefert keine Antwort auf die Frage. Sobald Sie genug [Reputation] (https://stackoverflow.com/help/whats-reputation) haben, können Sie [jeden Beitrag kommentieren] (https://stackoverflow.com/help/privileges/comment); Stattdessen [geben Sie Antworten, die keine Klärung durch den Fragesteller erfordern] (https://meta.stackexchange.com/questions/214173/why-doe-i-need-50-reputation-to-comment-what-can- i-do-stattdessen). - [Aus Bewertung] (/ review/low-quality-posts/19044377) –