私はコンポーネントとサービスを持っています:
成分:
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);
}
}
サービス:
@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;
}
}
私はPerson ItemをId( 'personID')と一緒に取得したいです。 Routeparamから取得したpersonID。そのためにはforeachループが必要ですか?しかし、私はこれに対する解決策を見つけていません。
前もって感謝します!
メソッド Array.filter
を使う必要があります。
this.persons = this.personService.getPersons().filter(x => x.id == this.personId)[0];
または Array.find
this.persons = this.personService.getPersons().find(x => x.id == this.personId);
この検索を頻繁に使用する場合は、データ構造を地図に変換してください。
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);
}
typeScriptからは、ネイティブのJS配列filter()メソッドを使用できます。
let filteredElements=array.filter(element => element.field == filterValue);
元の配列(0、1、またはそれ以上)から一致する要素のみを持つ配列を返します。
参照: https://developer.mozilla.org/it/docs/Web/JavaScript /参照/ GlobalObjects/Array/filter
あなたのサービスでこのコードを使用してください:
return this.getReports(accessToken)
.then(reports => reports.filter(report => report.id === id)[0]);