Печать json данных во вложенную html таблицу - PullRequest
0 голосов
/ 16 января 2020

с сервера, я получаю данные категории 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, как на рисунке. enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...