Показать сообщение отдельно
  #1 (permalink)  
Старый 03.07.2018, 13:17
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

Помогите уменьшить содержимое функции
Добрый день. У меня есть функция которая генерирует таблицу из массива данных.
Проблема в том что помимо массива в функцию передаются еще и значения, из за которых для разных пользователей таблица выглядит по разному, хотя сам массив не меняется. Вот часть функции:

function createTable(data, str){
    var html ="";
    for (i = 0; i < data.length; i++){
        if(str == 3){
            if(data[i].st === 0 && data[i].is == 'текст1'){
            html += '<tr class="trTOJ">' +
            '<td bgcolor="#bad7ff">' + data[i].cod + '</td>' +
            '<td bgcolor="#bad7ff">' + data[i].nr + '</td>' +
            '<td bgcolor="#bad7ff">' + data[i].or + '</td>' +
            '<td bgcolor="#bad7ff">' + data[i].np + '</td>' +
            '<td bgcolor="#bad7ff">' + data[i].op + '</td>' +
            '<td bgcolor="#bad7ff">' + data[i].is + '</td>' +
            '<td bgcolor="#bad7ff">' + data[i].vr + '</td>' +
            '<td class="btn btn-info btn-ioj" id="infoOrderJournal" data1="'+data[i].nr+'" data2="'+data[i].prim+'"\n\
                >' +'Оформление'+ '</td>' +
            '</tr>';
            };
            if(data[i].st === 1 && data[i].is == 'текст1'){
                html += '<tr id="trTOJ">' +
                '<td bgcolor="#a0f0f7">' + data[i].cod + '</td>' +
                '<td bgcolor="#a0f0f7">' + data[i].nr + '</td>' +
                '<td bgcolor="#a0f0f7">' + data[i].or + '</td>' +
                '<td bgcolor="#a0f0f7">' + data[i].np + '</td>' +
                '<td bgcolor="#a0f0f7">' + data[i].op + '</td>' +
                '<td bgcolor="#a0f0f7">' + data[i].is + '</td>' +
                '<td bgcolor="#a0f0f7">' + data[i].vr + '</td>' +
                '<td class="btn btn-info btn-woj " id="warningOrderJournal" data1="'+data[i].nr+'" \n\
                                          data2="'+data[i].prim+'">' +'Исполнение'+ '</td>' +
                '</tr>';
            };
        }else if(str == 4){
            if(data[i].st === 0 && data[i].is == 'текст2'){
            html += '<tr class="trTOJ">' +
            '<td bgcolor="#bad7ff">' + data[i].cod + '</td>' +
            '<td bgcolor="#bad7ff">' + data[i].nr + '</td>' +
            '<td bgcolor="#bad7ff">' + data[i].or + '</td>' +
            '<td bgcolor="#bad7ff">' + data[i].np + '</td>' +
            '<td bgcolor="#bad7ff">' + data[i].op + '</td>' +
            '<td bgcolor="#bad7ff">' + data[i].is + '</td>' +
            '<td bgcolor="#bad7ff">' + data[i].vr + '</td>' +
            '<td class="btn btn-info btn-ioj" id="infoOrderJournal" data1="'+data[i].nr+'" data2="'+data[i].prim+'"\n\
                >' +'Оформление'+ '</td>' +
            '</tr>';
            };
            if(data[i].st === 1 && data[i].is == 'текст2'){
                html += '<tr id="trTOJ">' +
                '<td bgcolor="#a0f0f7">' + data[i].cod + '</td>' +
                '<td bgcolor="#a0f0f7">' + data[i].nr + '</td>' +
                '<td bgcolor="#a0f0f7">' + data[i].or + '</td>' +
                '<td bgcolor="#a0f0f7">' + data[i].np + '</td>' +
                '<td bgcolor="#a0f0f7">' + data[i].op + '</td>' +
                '<td bgcolor="#a0f0f7">' + data[i].is + '</td>' +
                '<td bgcolor="#a0f0f7">' + data[i].vr + '</td>' +
                '<td class="btn btn-info btn-woj " id="warningOrderJournal" data1="'+data[i].nr+'" \n\
                                          data2="'+data[i].prim+'">' +'Исполнение'+ '</td>' +
                '</tr>';
            };
        }else{
            if(data[i].st === 0){
                html += '<tr class="trTOJ">' +
                '<td bgcolor="#bad7ff">' + data[i].cod + '</td>' +
                '<td bgcolor="#bad7ff">' + data[i].nr + '</td>' +
                '<td bgcolor="#bad7ff">' + data[i].or + '</td>' +
                '<td bgcolor="#bad7ff">' + data[i].np + '</td>' +
                '<td bgcolor="#bad7ff">' + data[i].op + '</td>' +
                '<td bgcolor="#bad7ff">' + data[i].is + '</td>' +
                '<td bgcolor="#bad7ff">' + data[i].vr + '</td>' +
                '<td class="btn btn-info btn-ioj" id="infoOrderJournal" data1="'+data[i].nr+'" data2="'+data[i].prim+'"\n\
                    >' +'Оформление'+ '</td>' +
                '</tr>';
            };
            if(data[i].st === 1){
                html += '<tr id="trTOJ">' +
                '<td bgcolor="#a0f0f7">' + data[i].cod + '</td>' +
                '<td bgcolor="#a0f0f7">' + data[i].nr + '</td>' +
                '<td bgcolor="#a0f0f7">' + data[i].or + '</td>' +
                '<td bgcolor="#a0f0f7">' + data[i].np + '</td>' +
                '<td bgcolor="#a0f0f7">' + data[i].op + '</td>' +
                '<td bgcolor="#a0f0f7">' + data[i].is + '</td>' +
                '<td bgcolor="#a0f0f7">' + data[i].vr + '</td>' +
                '<td class="btn btn-info btn-woj " id="warningOrderJournal" data1="'+data[i].nr+'" \n\
                                          data2="'+data[i].prim+'">' +'Исполнение'+ '</td>' +
                '</tr>';
            };
        };    
    };
    $('#table').html(html);
}


Можно ли как то ее уменьшить? тут 80% создания таблицы дублируются
и таких вот if(data[i].st === 1 && data[i].is == 'текст много штук') их может быть много.
Можно ли написать как то так:
function createTable(data, str){
    var html ="";
    for (i = 0; i < data.length; i++){
            html += '<tr class="trTOJ">' +
            '<td bgcolor="#bad7ff">' + data[i].cod + '</td>' +
            '<td bgcolor="#bad7ff">' + data[i].nr + '</td>' +
            '<td bgcolor="#bad7ff">' + data[i].or + '</td>' +
            '<td bgcolor="#bad7ff">' + data[i].np + '</td>' +
            '<td bgcolor="#bad7ff">' + data[i].op + '</td>' +
            '<td bgcolor="#bad7ff">' + data[i].is + '</td>' +
            '<td bgcolor="#bad7ff">' + data[i].vr + '</td>' +
            '<td class="btn btn-info btn-ioj" id="infoOrderJournal" data1="'+data[i].nr+'" data2="'+data[i].prim+'"\n\
                >' +'Оформление'+ '</td>' +
            '</tr>';
     };
     if(data[i].is == 'текст1'){
          //добавить только эту строку в таблицу
     }
     if(data[i].is == 'текст2'){
          //добавить только эту строку в таблицу
     }


Я понимаю что наврятли конечно, но может можно проще?
Ответить с цитированием