У меня есть следующие объекты:
- Форма
- Блок
- Строка
- Ячейка
- Поле
Root элемент Form
.
Внутри From
помещен Block
.
Block
содержит немного Rows
и каждый Row
может содержать несколько Cell
с различным содержанием внутри: Field
или Block
, где Block
это снова вложенная структура Block -> Rows -> Cells -> Field/Block
.
Это ориентированный конечный граф из root Form
и fini sh vertex Field
или Block
.
Только Block
и Field
сущностей имеют метод getId()
, который возвращает идентификатор вершины. Исходя из этого, я строю путь от root к конкретной вершине (Blcok, Field)
.
Я пытался проверить, представлена ли конкретная вершина объекта (Block)
в графе по пути, поэтому мое решение:
- Установить текущую вершину (Блок), с которой мы начинаем, установить путь дохода вершин
- Получить в l oop все строки текущей вершины (Блок)
- Затем внутри сначала l oop получить все ячейки из каждой строки, используя l oop
- Затем получить содержимое из каждой ячейки (поле, блок)
- Проверить, является ли он блоком, затем получить
id
и сравнить с входящим путем (id) - Если он не равен, тогда установить найденный блок как текущий (для l oop)
- Продолжается, пока я не могу найти путь
Код:
function getBlockFieldByPath(block: Block, path: string) {
let currentBlock = block;
let irows = 0;
let jcells = 0;
while(irows < currentblock.getRows().length) {
let cells = rows[irows].getCells();
while(jcells < cells.length) {
let content = cells[jcells].getContent(); // it is should be Block or Field,
if (content.getId() == path) {
return content;
}
if (content == Block) {
currentblock = content; // Because content is Block
}
jcells++;
}
irows++;
}
}
Где моя ошибка?