test-task-treerender
39 строк · 1.5 Кб
1/**
2* Функция для создания массива узлов дерева
3* @param {*} str - Исходная строка, пример: (1 (2 (4 5 6 (7) 108 (9)) 3))
4*/
5export function createNodes(str) {6const nodes = [];7
8let currentLevel = -1; // Текущий уровень вложенности для числа9let currentValueNumber = ""; // Текущая строка, представляющая в конечном итоге число10let currentIndex = 0; // Индекс текущего элемента в массиве узлов11
12for (let i = 0; i < str.length; i++) {13if (str[i] === "(" || str[i] === ")" || str[i] === " ") {14// Если существует составленное число, добавляем его в массив15if (currentValueNumber) {16const node = {17value: currentValueNumber,18level: currentLevel,19index: currentIndex,20};21
22nodes.push(node);23
24currentValueNumber = ""; // Устанавливаем текущее число в пустую строку25currentIndex++; // Увеличиваем индекс элемента26}27
28// Изменяем уровень вложенности29if (str[i] === "(") currentLevel++;30if (str[i] === ")") currentLevel--;31}32// Добавляем цифру в результирующей строке представляющей число33else {34currentValueNumber += str[i];35}36}37
38return nodes;39}
40