2013-04-25 53 views
1

我有很多的foreach的打字稿,他們中的一些:TypeScript重構。更新集合

$.each(obj.triggers, function (index, value) { 
       (<any>sc.triggers).push(Trigger.objectToTrigger(value)); 
      });  
$.each(obj.notStartTriggers, function (index, value) { 
       (<any>sc.notStartTriggers).push(Trigger.objectToTrigger(value)); 
      }); 

我如何重構這個的foreach的?我需要一個方法來解決這個問題。

感謝所有。我需要更新sc.notStartTriggers集合,而不是添加(推)?

+0

,我不認爲這個問題是非常明顯的得到(米)的任何答案。你究竟想要做什麼,你嘗試過什麼,什麼是或不在工作? – JcFx 2013-04-25 07:52:50

回答

0

因此,您有一個屬性objsc上您想使用觸發器進行循環的屬性。因此,這裏是一個函數,把這些作爲參數:

function process(obj,sc,property:string,Trigger){ 
    $.each(obj[property], function (index, value) { 
       (sc[property]).push(Trigger.objectToTrigger(value)); 
      });  
} 

process(obj,sc,"triggers",Trigger); 
process(obj,sc,"notStartTriggers",Trigger); 

請注意,以下是在JavaScript /打字稿相當於:

x.asdf 
x["asdf"] 
0

你的代碼重構的主要目的很可能是取消鑄造,而不是去除輕微的重複。

此外,您不需要遠至any,因爲您正在查找的操作來自一個數組,因此您可以使用至少知道這一點的any[]

我已經允許兩個參數傳遞給我的方法:)拉伸羅伯特ç馬丁對參數的數量規則 - 參數是通過該方法的名字所暗示的順序,添加觸發陣列

function addTriggerToArray(trigger: any, triggerArray: any[]) { 
    triggerArray.push(trigger); 
} 

$.each(obj.triggers, function (index, value) { 
    addTriggerToArray(Trigger.objectToTrigger(value), sc.triggers); 
});  
$.each(obj.notStartTriggers, function (index, value) { 
    addTriggerToArray(Trigger.objectToTrigger(value), sc.notStartTriggers); 
}); 

要更新你可以使用現有的項目...

function updateTrigger(trigger: any, index: number, triggerArray: any[]) { 
    triggerArray[index] = trigger; 
} 

$.each(obj.triggers, function (index, value) { 
    updateTrigger(Trigger.objectToTrigger(value), index, sc.triggers); 
});  
$.each(obj.notStartTriggers, function (index, value) { 
    updateTrigger(Trigger.objectToTrigger(value), index, sc.notStartTriggers); 
}); 
+0

感謝所有。我需要更新sc.notStartTriggers集合,而不是添加(推)? – user2264703 2013-04-29 07:31:59

+0

要更新集合中的項目,您需要知道索引,所以您也必須傳遞它:'triggerArray [index] = trigger;'。 – Fenton 2013-04-29 07:38:35

+0

在這個函數中addTriggerToArray(trigger:any,triggerArray:any []){triggerArray.push(trigger); }我不能使用索引 – user2264703 2013-04-29 08:17:09