2017-02-03 10 views
0

私は2つのクラスを作成しました。いくつかをインスタンス化した後typescriptですか基本的なOOPのネストされた結果が

export class hsDeckComponent { 
    //Data-Bindings 

    deckList: Array<hsDeck>; 

    constructor(){ 

     let priestClass: hsClass = new hsClass(1,"priest"); 
     let shamanClass: hsClass = new hsClass(2,"shaman"); 

     this.deckList = [ 
      new hsDeck(1,"dragon priest",priestClass), 
      new hsDeck(2,"reno priest",priestClass), 
      new hsDeck(3,"aggro shaman",shamanClass), 
      new hsDeck(4,"midrange jade shaman",shamanClass) 
      ]; 
    } 
} 

デッキリストアレイの作品が、私は達成しようとしたものではありません。

私が達成しようとしているのは、hsClassでグループ化された結果(データ構造体?配列?)です。私はhsClassesにネストされたhsDecksを持っていたいと思っています。

hsClass1

  • hsDeck1
  • hsDeck2

hsClass2

  • hsDeck3
  • hsDeck4

これを達成するためのベストプラクティスは何ですか?

答えて

2

ご使用のケースにあまり適していないデータを保存しています。それぞれhsClasshsDeckを「知る」ことを望みますが、hsDeckにはhsClassがあることを指定しています(これは逆です)。

これには2通りの方法があります。

  1. hsClasshsDeckへの参照を持つようにするには、クラスを変更します。これは簡単な解決方法ですが、関係が変更された場合は2箇所で更新する必要があるため、これらの双方向の依存関係は望ましくありません。

  2. 動的に必要な構造を必要に応じて計算します。

あなたはそうのようなlodashを用いて第2の方法を実現することができます:

const classDecks = _.groupBy(this.deckList, ((deck: hsDeck): number => deck.hsClass.id)); 

// returns something like { 1: [dragon priest deck, reno priest deck], 2: [aggro shaman deck, midrange jade shaman deck ] } 
関連する問題