Javascript If условие с различными переменными и связанными идентификаторами

1

Я создал условие if, но я хочу проверить несколько переменных. Переменная относится к другому id, как вы можете видеть ниже.

Возможно ли оптимизировать код, потому что я не хочу копировать прошлое и изменять переменные.

if (T11 > 33){
    document.getElementById("T11").innerHTML = '-';
}
else if(T11 > 2){
    document.getElementById("T11").innerHTML = T11-30;
    document.getElementById("T11").style.textDecoration = 'underline';
}
else {
    document.getElementById("T11").innerHTML = T11;
    }



if (T12 > 33){
        document.getElementById("T12").innerHTML = '-';
    }
    else if(T12 > 2){
        document.getElementById("T12").innerHTML = T12-30;
        document.getElementById("T12").style.textDecoration = 'underline';
    }
    else {
        document.getElementById("T12").innerHTML = T12;
        }



if (T.. > 33){
        document.getElementById("T..").innerHTML = '-';
    }
    else if(T.. > 2){
        document.getElementById("T..").innerHTML = T..-30;
        document.getElementById("T..").style.textDecoration = 'underline';
    }
    else {
        document.getElementById("T..").innerHTML = T..;
        }

Пожалуйста, предложите.

  • 0
    if не создает цикл ... Обратите внимание, что тире ( - ) не является допустимым символом в идентификаторе JS.
  • 0
    цикл if ... Что?
Показать ещё 3 комментария
Теги:
if-statement

4 ответа

0
Лучший ответ

T1 T33 должен быть t, где t - массив. Затем выполняется один цикл. Если от T1 до T33 нельзя создать массив (но я не могу представить, почему они не могли), вы можете сначала создать временный массив из них:

var t = [T1, T2, T3, T4, ... ];

Но опять же, действительно, у вас не должно быть T1 T33; просто t.

Если у вас есть t, вы можете использовать forEach:

t.forEach(function(val, index) {
   var element = document.getElementById("T" + (index + 1));
   if (val > 33){
        element.innerHTML = '-';
    }
    else if (t[n] > 2){
        element.innerHTML = val - 30;
        element.style.textDecoration = 'underline';
    }
    else {
        element.innerHTML = val;
    }
});

... но если вы хотите цикл for:

for (var n = 0; n < t.length; ++n) {
   var val = t[n];
   var element = document.getElementById("T" + (n + 1));
   if (val > 33){
        element.innerHTML = '-';
    }
    else if (t[n] > 2){
        element.innerHTML = val - 30;
        element.style.textDecoration = 'underline';
    }
    else {
        element.innerHTML = val;
    }
}
0

сделать его функцией

codeReduce(13,TD1) //call like this

function codeReduce(id,name){
    if(id > 33){
        document.getElementById(name).innerHTML = '-';
    }
    else if(id > 2){
        document.getElementById(name).innerHTML = id-30;
        document.getElementById(name).style.textDecoration = 'underline';
    }
    else{
        document.getElementById(name).innerHTML = id;
    }
}
0

Вы можете использовать объект, где у вас есть строка как ключ и значение, например

values = {
    T11: 20,
    T22: 10
}

Затем используйте Object.keys и loop

Object.keys(values).forEach(function (k) {
    var element = document.getElementById(k);
    if (values[k] > 33) {
        element.innerHTML = '-';
        return;
    }
    element.innerHTML = values[k];
    if (values[k] > 2) {
        element.innerHTML -= 30;
        element.style.textDecoration = 'underline';
    }
});
0

Храните данные в массиве объектов

const data = [{
   variable: T11,
   name: "T11" 
},{
    variable: T12,
    name: "T12"
}];

data.forEach(d => {
    let element = document.getElementById(d.name);
    if(d.variable > 33){
        element.innerHTML = '-';
    }else if(d.variable > 2){
        element.innerHTML = d.variable - 30;
        element.style.textDecoration = 'underline';
    }else{
        element.innerHTML = d.variable
    }
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню