2016-06-29 2 views
0

こんにちは仲間のプログラマー、私はプログラミングとtypescriptで新しいです。私の質問は、どのように私はseperatlyメソッドにこのコードを置くことができます。メソッドに適切に置く(TypeScript初心者)

var item = new RoadMapExampleItem(); 
             item.calculatedCompleted = m.calculatedCompleted; 
             item.estimatedCompleted = m.estimatedCompleted; 
             item.epicId = e.id; 
             item.epicText = e.name; 
             item.initiativeId = i.id; 
             item.initiativeText = i.name; 
             item.mileStoneId = m.id; 
             item.mileStoneText = m.name; 
             item.epicProgress = e.progress; 
             item.mileStoneProgress = m.progress; 
             item.initiativeProgress = i.progress; 
             item.versionId = v.id; 
             item.versionText = v.versionText; 
             result.push(item); 
            }); 

これはあなたがパラメータとして「e」を取る方法を作成することができ、その後、あなたが結果の配列にそれをプッシュするコード全体

private buildRoadMapExampleItems(versions: Version[]): RoadMapExampleItem[] { 
     var result = new Array<RoadMapExampleItem>(); 

     if (versions != null) 
      versions.forEach(v => { 
       if (v.mileStones != null) 
        v.mileStones.forEach(m => { 
         if (m.initiatives != null && m.initiatives.length > 0) { 
          m.initiatives.forEach(i => { 
           if (i.epics != null && i.epics.length > 0) { 
            i.epics.forEach(e => { 
             var item = new RoadMapExampleItem(); 
             item.calculatedCompleted = m.calculatedCompleted; 
             item.estimatedCompleted = m.estimatedCompleted; 
             item.epicId = e.id; 
             item.epicText = e.name; 
             item.initiativeId = i.id; 
             item.initiativeText = i.name; 
             item.mileStoneId = m.id; 
             item.mileStoneText = m.name; 
             item.epicProgress = e.progress; 
             item.mileStoneProgress = m.progress; 
             item.initiativeProgress = i.progress; 
             item.versionId = v.id; 
             item.versionText = v.versionText; 
             result.push(item); 
            }); 
           } 
           else { 
            var item = new RoadMapExampleItem(); 
            item.calculatedCompleted = m.calculatedCompleted; 
            item.estimatedCompleted = m.estimatedCompleted; 
            item.initiativeId = i.id; 
            item.initiativeText = i.name; 
            item.mileStoneId = m.id; 
            item.mileStoneText = m.name; 
            item.versionId = v.id; 
            item.versionText = v.versionText; 
            item.mileStoneProgress = m.progress; 
            item.initiativeProgress = i.progress; 
            result.push(item); 
           } 
          }); 
         } 

答えて

1

です。だから、

i.epics.forEach() 

の内側にあなたは

i.epics.forEach(e => result.push(this.createItem(e))); 

ような何かを書くことができ、これは、コードをオフに分割する方法だろう

private createItem(e) : RoadMapExampleItem 
{ 
      var item : RoadMapExampleItem = new RoadMapExampleItem(); 
            item.calculatedCompleted = m.calculatedCompleted; 
            item.estimatedCompleted = m.estimatedCompleted; 
            item.epicId = e.id; 
            item.epicText = e.name; 
            item.initiativeId = i.id; 
            item.initiativeText = i.name; 
            item.mileStoneId = m.id; 
            item.mileStoneText = m.name; 
            item.epicProgress = e.progress; 
            item.mileStoneProgress = m.progress; 
            item.initiativeProgress = i.progress; 
            item.versionId = v.id; 
            item.versionText = v.versionText; 
return item; 
} 

のように、そのメソッドのブロックの下に第二の方法を作成します。

しかし、私がちょうどあなたが尋ねたものを正確に分割する方法を言うよりも、ちょっとした情報を与えることができれば。 ITはおそらく "item.epicId = e.id、item.epicText = e.name、.."を持つほうが面倒です。 これはBuilder patternを見るのに適した場所です。 (しかし、プログラミングを始めたばかりの方には、まだ心配していませんが、デザインパターンは後で学習するものです。

さらに、タイプスクリプトなので注意してください。 。「型」を使用することができますが、「アイテム」を作成するときは、item : RoadMapExampleIemを使用する場合がありますそして最後に、代わりにvarのあなたは、将来的にletを使用する場合があります

を - 。。また、それはに賢明であるかもしれないことに注意してくださいさらに多くの方法で分割すると、かなりのレベルのインデントがあります。この部分では、

if (versions != null) 
     versions.forEach(v => { 
      if (v.mileStones != null) 
       v.mileStones.forEach(m => { 
        if (m.initiatives != null && m.initiatives.length > 0) { 
         m.initiatives.forEach(i => { 
          if (i.epics != null && i.epics.length > 0) { 

しかし、あなたはすでに方法を考えているのは良いことです! ;-)

+0

私は丁重にお願いします。私は今、それについて取り組んでいます。 –

+0

@CecilBoyeよろしくお願いします。これがあなたの問題を解決した場合、この回答を解決策として受け入れることで他人に知らせることができます;-) –

+0

が絶対に行います! –

0

RoadMapExampleItem

class RoadMapExampleItem { 
    constructor(public calculatedCompleted:number, public estimatedCompleted: number) //repeat all fields 
} 

使用

var item = new RoadMapExampleItem(m.calculatedCompleted, m.estimatedCompleted);