Привет, коллеги-программисты, я новичок в программировании и машинописном тексте. Мой вопрос: как я могу поместить этот код отдельно в метод.
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);
}
});
}
Вы можете создать метод, принимающий "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) {
Но хорошо, что вы уже подумываете о методах! ;-)
RoadMapExampleItem
class RoadMapExampleItem {
constructor(public calculatedCompleted:number, public estimatedCompleted: number) //repeat all fields
}
Применение
var item = new RoadMapExampleItem(m.calculatedCompleted, m.estimatedCompleted);