Масиви JS. Об’єкт JS. Багатовимірні масиви JavaScript

Проблеми рекурсії і стека: об’єктно-орієнтоване мислення

Абзац містить пропозиції, фрази, слова і об’єкти. Будь-яка текстова частина абзацу може мати жирний, курсив або підкреслення накреслення. В будь-якому місці тексту може бути надрядковий індекс або змінений колір букв.

Об’єкт абзацу повинен допускати рекурсію варіантів накреслення, але абзац не можна вкладати один в одного. Можна вкласти таблицю в абзац. У таблиці може бути безліч осередків, а в кожній з них безліч абзаців і безліч таблиць.

Створення об’єктів за властивостями тексту:

  • жирність;
  • нахил;
  • підкреслення;
  • закреслення;
  • зміна кольору;
  • надрядковий індекс;
  • підрядковий індекс;
  • та ін –

призводить до об’єктів форматування. При видаленні елементів абзацу насправді не видаляються. MS Word передбачає можливість відкоту, тобто відновлення видалених елементів. Історія undo/redo в текстових процесорах – це норма речей. Цього не можна сказати про JS: видалити елемент масиву – значить втратити його, якщо не передбачити власний варіант відкату.

Об’єкт абзацу не може включати в себе об’єкти речень, фраз або слів. Це надмірно, не сучасно і дозволить побудувати струнку систему об’єктів *.docx – документа.

Таблиця – самостійний об’єкт, але тісно пов’язаний з об’єктом абзацу. Ці два об’єкти можуть викликати один одного взаємно, і рівень вкладеності таких викликів не обмежений. Тут виникає проблема рівня, на якому мислить програміст або працює відладчик.

Сформулювати чергове рішення або знайти помилку дуже важко, якщо мислити класичним чином на рівні коду. Але якщо мати уявлення про динаміку даних і поточному рівні вкладеності викликів (стеку), то легко можна рухатися далі, виявляючи по ходу розробки, баги, невизначеності і слабкі місця.

Ідеальний фундамент для організації стека – JS рядок, не обов’язково в форматі JSON, зручному для обміну між сервером і клієнтом. Трансформуючи серверний компонент – бібліотеку PHPOffice/PHPWord – послідовність AJAX запитів, можна отримати читабельний варіант «руху» з реального документу.

Фактично, функціонал бібліотеки розібрав документ і склав систему об’єктів, але переглядати його можна в браузері і будувати адекватну динамічну систему об’єктів.

На JS додати в масив послідовність рядків – не проблема. Протокол рекурсивних рівнів буде доступний, логіка переміщення за рівнями вкладеності – очевидна. Можливо створити історію переміщень за значеннями змінних, масивів, коду методів об’єктів і функцій.