正确地将它放入一个方法(TypeScript Newbie)

时间:2016-06-29 08:26:20

标签: javascript angularjs typescript1.8

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);
                                }
                            });
                        }

2 个答案:

答案 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);