web-dev-qa-db-ja.com

Angular 2 TypeScript配列の中の要素を見つける方法

私はコンポーネントとサービスを持っています:

成分:

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ループが必要ですか?しかし、私はこれに対する解決策を見つけていません。

前もって感謝します!

87
trap

メソッド 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);
184

以下の配列があるとします。

Skins[
    {Id: 1, Name: "oily skin"}, 
    {Id: 2, Name: "dry skin"}
];

Id = 1Name = "oily skin"を使ってitemを取得したい場合は、以下のようにします。

var skinName = skins.find(x=>x.Id == "1").Name;

結果はskinNameが "Oily skin"であることを返します。

どうぞよろしくお願いいたします。

enter image description here

43
Hai Dinh

この検索を頻繁に使用する場合は、データ構造を地図に変換してください。

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

typeScriptからは、ネイティブのJS配列filter()メソッドを使用できます。

let filteredElements=array.filter(element => element.field == filterValue);

元の配列(0、1、またはそれ以上)から一致する要素のみを持つ配列を返します。

参照: https://developer.mozilla.org/it/docs/Web/JavaScript /参照/ GlobalObjects/Array/filter

4
Luca C.

あなたのサービスでこのコードを使用してください:

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