Есть у меня набор данных (таблица в БД) следующими полями:
- ID
- Текст
- Организация
Задача - создать шаблон, который может вывести данные из этой таблицы в html-виде с одним маленьким условием, которое все портит.
Если в строке поле Текст пустое, то оно должно объединяться с полем Текст из предыдущей строки.
Если в строке поле Организация совпадает с полем Организация из предыдущей строки, то они тоже должны объединяться. Для следующего набора данных
(1, 'Foo bar', 'Org A')
(2, '', 'Org A')
(3, 'Bar', 'Org A')
(4, '', 'Org B')
(5, 'Text', 'Org B')
должна выйти вот такая таблица:
<table>
<tr>
<td>1</td>
<td rowspan="2">Foo bar</td>
<td rowspan="3">Org A</td>
</tr>
<tr>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td rowspan="2">Bar</td>
</tr>
<tr>
<td>4</td>
<td rowspan="2">Org B</td>
</tr>
<tr>
<td>5</td>
<td>Text</td>
</tr>
</table>
Я это сделал, но сделал как мне кажется костыльно - применив предварительную обработку данных.
Т.е. для полей Текст и Организация я предварительно высчитываю, сколько нужно будет полей объединить и потом передаю эти данные в шаблон в виде:
Поле => {rowspan: ЧислоОбъединяемыхСтрок, Value: ЗначениеПоля}
Все это перегружает и замедляет код и затрудняет понимание логики его работы. Хотя работает он правильно.
Можно ли этого избежать, применив какие-либо особые приемы верстки или какие-нибудь ясные способы на JS?