Цитата:
Только с пустыми fid не объединять, а строки с fid:'3' - объединить. |
<head>
<style>
table {
border: 1px solid black;
border-collapse: collapse;
}
td {
border: 1px solid black;
}
</style>
</head>
<body>
<table id="mytable"></table>
<script>
const data = [
{id:"1", name: "1", fid:""},
{id:"2", name: "2", fid:"1"},
{id:"3", name: "3", fid:"3"},
{id:"4", name: "4", fid:"4"},
{id:"5", name: "5", fid:"1"},
{id:"6", name: "6", fid:""},
{id:"7", name: "7", fid:"5"},
{id:"8", name: "8", fid:""},
{id:"9", name: "9", fid:"3"},
{id:"10", name: "10", fid:"1"},
{id:"11", name: "11", fid:""},
{id:"12", name: "12", fid:"5"}
];
function groupe (data) {
const groupedata = [];
for (const {id, name, fid} of data) {
if (fid === "") {
groupedata.push({rows:[{id, name}], fid});
} else {
const row = groupedata.find(row => row.fid === fid)
if (!row) {
groupedata.push({rows:[{id, name}], fid});
} else {
row.rows.push({id, name})
}
}
}
return groupedata;
}
function createtable (table, groupedata) {
const thead = document.createElement('thead')
thead.innerHTML = '<tr><th>id</th><th>name</th><th>fid</th></tr>';
table.append(thead);
const tbody = document.createElement('tbody');
for (const {rows, fid} of groupedata) {
for (let i = 0; i<rows.length; i++) {
const row = document.createElement('tr');
const tdid = document.createElement('td');
const tdname = document.createElement('td');
tdid.textContent = rows[i].id;
tdname.textContent = rows[i].name;
row.append(tdid,tdname);
if (i === 0) {
const tdfid = document.createElement('td');
tdfid.textContent = fid;
tdfid.rowSpan = rows.length;
row.append (tdfid)
}
tbody.append (row);
}
}
table.append(tbody);
}
const groupedata = groupe(data);
createtable(document.getElementById('mytable'), groupedata);
</script>
<body>
|
Цитата:
Плюсик поставил, жаль что нельзя поставить 5. А можно еще попросить проставить комментарии в какой строке что происходит. Мне хотелось бы не просто скопипастить код, но и самому понять где, что и как, т.к. я хочу научиться сам это делать. |
Цитата:
|
Цитата:
К тому же завтра выходные, заниматься изучением будет некогда. И еще вопрос: Я немного изменил массив, оставил только fid:"1" для удобства
const data = [
{id:"2", name: "2", fid:"1"},
{id:"6", name: "2", fid:"1"},
{id:"2", name: "2", fid:"1"},
{id:"7", name: "7", fid:"1"},
{id:"10", name: "10", fid:"1"},
];
столбец fid:"1" получается объединенный, как продолжить объединение ячеек в других столбцах, например где name: "2" и id:"2" ? соответственно, так же изначально неизвестно количество name: "2" и id:"2" Если "криво" объяснил, пишите. |
Anat37, если у вас id где-то повторяется, то у вас что-то не так с данными, потому что id предполагается уникальным.
|
Цитата:
|
Почему сразу не спросить все то, что нужно.
А то - сначала "для разминки" скажите как сделать то, потом усложним задание, сделайте это. Спросите сразу все, что надо. Сделайте нормальный тестовый пример, что бы нам его не придумывать... |
Цитата:
1. Извините что сразу не ответил, в выходные занят сильно. 2. Нивкоем разе не хотел никого обидеть, я самостоятельно пытаюсь изучить JS и сам себе придумываю задания. Поэтому так и получилось.Извините еще раз. Попробую объяснить задачу: В таблице количество столбцов изначально неизвестно (может быть 1, а может быть и 10). В каждом столбце могут быть одинаковые строки. Сначала идет объединение по первому столбцу, потом по второму, но объединяются строки, которые входят в объединенные строки первого столбца и т.д..
const data = [
{id:"2", name: "2", fid:"1"},
{id:"6", name: "2", fid:"1"},
{id:"2", name: "2", fid:"1"},
{id:"7", name: "7", fid:"1"},
{id:"10", name: "10", fid:"1"},
{id:"11", name: "11", fid:"2"},
{id:"12", name: "11", fid:"2"},
{id:"1", name: "1", fid:"2"},
{id:"10", name: "10", fid:"2"},
{id:"5", name: "5", fid:""},
{id:"3", name: "5", fid:""},
];
т.е. из этого объединение нет по строке вообще если первый столбец пустой, {id:"10", name: "10", fid:"1"}, и {id:"10", name: "10", fid:"2"}, объединения по id и name нет, т.к. они в разных объединения первого столбца. Надеюсь объяснил правильно. И еще вопрос: можете посоветовать учебное пособие для самостоятельного изучения? Здесь вот есть похожее, но из таблицы, а не из массива: https://stackoverflow.com/questions/...ing-javascript |
Цитата:
Цитата:
Цитата:
|
| Часовой пояс GMT +3, время: 22:55. |