2016-05-12 10 views
0

私は在庫クラスを持っています。そのクラスには、それらの中にアイテムの配列を持つ2つの関数があります。私は両方の配列からすべてのアイテムをつかみ、それらをまとめてシングル配列にして、アイテムをフィルタリングするのに使用したいと思います。オブジェクトを配列にプッシュ

class Inventory { 

    private _lions = []; 
    private _wolves = []; 
    private _allAnimals: Array<any> = []; 

    getAllLions(): void { 
     const lions: Array<ILion> = [ 
      { id: 1, name: 'Joffrey', gender: Gender.male, age: 20, price: 220, species: Species.lion, vertrabrates: true, warmBlood: true, hair: 'Golden', runningSpeed: 30, makeSound() { } }, 
      { id: 2, name: 'Tommen', gender: Gender.male, age: 18, price: 230, species: Species.lion, vertrabrates: true, warmBlood: true, hair: 'Golden', runningSpeed: 30, makeSound() { } }, 
      { id: 3, name: 'Marcella', gender: Gender.female, age: 24, price: 180, species: Species.lion, vertrabrates: true, warmBlood: true, hair: 'Golden', runningSpeed: 30, makeSound() { } }, 
     ]; 

     for (let lion of lions) { 
      this._lions.push(lion); 
     }   
    } 

    getAllWolves(): void { 
     const wolves: Array<IWolf> = [ 
      { id: 1, name: 'Jon', gender: Gender.male, price: 130, species: Species.wolf, age: 13, vertrabrates: true, warmBlood: true, hair: 'Grey', runningSpeed: 30, makeSound() { } }, 
      { id: 2, name: 'Robb', gender: Gender.male, price: 80, species: Species.wolf, age: 18, vertrabrates: true, warmBlood: true, hair: 'Black', runningSpeed: 30, makeSound() { } }, 
      { id: 3, name: 'Sansa', gender: Gender.female, price: 10, species: Species.wolf, age: 35, vertrabrates: true, warmBlood: true, hair: 'Grey', runningSpeed: 30, makeSound() { } }, 
      { id: 4, name: 'Arya', gender: Gender.female, price: 190, species: Species.wolf, age: 8, vertrabrates: true, warmBlood: true, hair: 'White', runningSpeed: 30, makeSound() { } }, 
     ]; 

     for (let wolf of wolves) { 
      this._wolves.push(wolf); 
     } 
    } 

    getAllAnimals(): void { 
     this._allAnimals = this._lions.concat(this._wolves); 
    }; 

    findByTemplate(template: any): Array<any> { 
     return this._allAnimals.filter(animal => { 
      return Object.keys(template).every(propertyName => animal[propertyName] === template[propertyName]); 
     }); 
    } 
} 

ライオンズとオオカミのアレイのforループは機能しますが、フィールド全体を押し込むことになります。しかし、その後、フィルター関数に問題を引き起こす配列内に配列をプッシュしています。

配列を配列に挿入することなく、ライオン配列を_lionフィールドにプッシュすることはできますか?

this._wolves = this._wolves.concat(wolves); 

が、それは別の配列とそれらをマージする配列からすべてのオブジェクトをつかむ連結して、良いソリューションです:

答えて

1

this._wolves.push(...wolves); 
+0

あなたがこれを行うれる好ましい方法があると思いますか?パフォーマンスに敏感ですか? –

+0

性能はわかりませんが、配列にアイテムを追加_追加しますが、concat_returnsは新しい配列_を返します。したがって、ソース配列をそのまま、または変更したい場合には、それは依存している可能性があります。 –

0

はと思われます。しかし、そうしないと、現在の配列からオブジェクトが返されます。あなたのような、プッシュを使用してそれを行うことができ、拡散演算子で

関連する問題