Задать вопрос

Как обойти всю таблицу по tr и записать данные в массив JS?

Всем привет!! У меня есть таблица такого вида:
<table>
<thead>
<tr>
<th>ID</th>
<th>Object1</th>
<th>Object2</th>
</tr>
</thead>
<tbody>
<tr>
     <td id-object='ID'></td>
     <td object-name="object1">3442</td>
     <td object-name="object2">10045</td>
</tr>
</tbody>
</table>

Мне необходимо чтобы скрипт проходил по ячейкам каждой таблицы и создавал массив вида
Myarray['ID']={"object1":3442, "object2":10045......}, но только чтобы ключи задавались циклом считывая атрибут ячейки "object-name".
  • Вопрос задан
  • 410 просмотров
Подписаться 3 Простой 1 комментарий
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const table = document.querySelector('здесь селектор вашей таблицы');
const idAttr = 'id-object';
const propAttr = 'object-name';

const data = Array.prototype.reduce.call(
  table.querySelectorAll('table tbody tr'),
  (acc, tr) => (
    tr.querySelectorAll(`[${propAttr}]`).forEach(function(td) {
      this[td.getAttribute(propAttr)] = td.innerText;
    }, acc[tr.querySelector(`[${idAttr}]`).getAttribute(idAttr)] = {}),
    acc
  ),
  {}
);

// или

const data = {};
for (const { rows } of table.tBodies) {
  for (const { cells } of rows) {
    const item = data[cells[0].attributes[idAttr].value] = {};
    for (let i = 1; i < cells.length; i++) {
      const td = cells[i];
      item[td.attributes[propAttr].value] = td.textContent;
    }
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы