Поместить его в метод правильно (TypeScript Newbie)

0

Привет, коллеги-программисты, я новичок в программировании и машинописном тексте. Мой вопрос: как я могу поместить этот код отдельно в метод.

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 ответа

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. (Если бы вы только начали программировать, я бы не стал беспокоиться об этом, шаблоны проектирования - это то, что вы узнаете позже.

Кроме того, может быть разумно заметить, что это машинопись, поэтому вы можете использовать "типы". Когда вы создаете "элемент", вы можете использовать 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 Добро пожаловать. Если это решило вашу проблему, вы можете сообщить другим, приняв этот ответ в качестве решения ;-)
Показать ещё 4 комментария
0

RoadMapExampleItem

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

Применение

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню