Hello其他程序员,我是编程和打字稿的新手。我的问题是如何将这个代码单独地放在一个方法中。
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);
});
这是整个代码
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);
}
});
}
答案 0 :(得分:1)
您可以创建一个以“e”作为参数的方法,然后将其推入结果数组中。所以在
里面 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;
}
这是分割代码的一种方法。
但是,如果我能提供更多信息,而不仅仅是说如何准确地分离你的要求。拥有“item.epicId = e.id,item.epicText = e.name,..”可能有点麻烦。 这可能是一个了解Builder pattern的好地方。 (如果你刚刚开始编程,我不会真的担心这个,设计模式是你稍后会学到的。
此外,注意它是打字稿可能是明智的,因此您可以使用“类型”。创建“item”时,您可能希望使用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) {
但是你已经在考虑方法了! ;-)
答案 1 :(得分:0)
RoadMapExampleItem
class RoadMapExampleItem {
constructor(public calculatedCompleted:number, public estimatedCompleted: number) //repeat all fields
}
用法
var item = new RoadMapExampleItem(m.calculatedCompleted, m.estimatedCompleted);