с сервера, я получаю данные категории JSON. Я хочу напечатать их в виде таблицы. если категория уровня 1 одинакова, просто напечатайте один раз и напечатайте вложенные дочерние категории. вот мои JSON данные.
const jsonData = [{
category_id: '010103',
level1: 'electronics',
level2: 'TV',
level3: 'samsung',
}, {
category_id: '010104',
level1: 'electronics',
level2: 'Pc',
level3: 'philips',
}, {
category_id: '010101',
level1: 'households',
level2: 'kitchen',
level3: 'table',
}];
и вот мой исходный код
function printCategory(data) {
let list = data['list'];
console.log(list);
let uniqueLevels = {};
if( list != null && list.length > 0 ) {
$.each(list, function(index, value){
if(value.level1 != null && (uniqueLevels[value.level1] == null || typeof uniqueLevels[value.level1] == 'undefined')) {
uniqueLevels[value.level1] = {};
}
if( value.level2 != null && (uniqueLevels[value.level1][value.level2] == null || typeof uniqueLevels[value.level1][value.level2] == 'undefined') ) {
uniqueLevels[value.level1][value.level2] = {};
}
if( value.level3 != null ) {
if(uniqueLevels[value.level1][value.level2][value.level3] == null || typeof uniqueLevels[value.level1][value.level2][value.level3] == 'undefined') {
uniqueLevels[value.level1][value.level2][value.level3] = 1;
}
else {
uniqueLevels[value.level1][value.level2][value.level3] += 1;
}
}
});
}
let tbodyHTML = '';
$.each(uniqueLevels, function(level1_key, level1_data){
$.each(level1_data, function(level2_key, level2_data){
let level2Rows = '';
let flagAddTR = false;
let rowspanCount = 0;
$.each(level2_data, function(level3_key, level3_data){
rowspanCount += level3_data;
});
tbodyHTML += '<tr><td rowspan="'+ rowspanCount +'">'+ level1_key +'</td><td rowspan="'+ rowspanCount +'">'+ level2_key +'</td>';
$.each(list, function(key, value){
if( (value['level1'] == level1_key) && (value['level2'] == level2_key) ) {
if( level2Rows != '' ) {
flagAddTR = true;
}
if( flagAddTR ) {
level2Rows += '<tr>';
}
level2Rows += '<td>'+ value['level3'] +'</td><td>'+ value['category_id'] +'</td><td>'+value['meta_count']+'</td><td>'+moment(value['reg_date']).format('YYYY-MM-DD HH:mm:ss')+'</tr>';
}
});
tbodyHTML += level2Rows;
});
});
$('#tbody').html(tbodyHTML);
}
я хочу добиться этого [! [введите описание изображения здесь] [1]] [ 1]
Моя программа пропускает печать пустых уровней. если у меня есть level1, но их дочерние уровни пусты, он должен продолжать печатать. если level1 имеет две разные категории level2, выведите их как категории level3, как на рисунке. 