JS: присваивать значение переменной внутри цикла for в зависимости от условия

#javascript #jquery

#javascript #jquery

Вопрос:

Мне нужно добавить

 if (obj1[i][0] !== d1 amp;amp; row > -1) continue;
  

и

 if (obj1[i][1] !== d2 amp;amp; row > -1) continue;
  

в зависимости от значения d1 and d2 но я не уверен, что я делаю неправильно.

if оператор действует как фильтр, он допускает только те значения, которым присвоены d1 или d2 , например, если d1=1 он будет печатать только значения с 1, а не все значения в таблице.

 $("#session_id, #start_date").on('change', function() {
    var d1 = $( "#session_id" ).val();
    var d2 = $( "#start_date" ).val();

    $("#tbody").empty();


    if(d1 != null || d1 != undefined){
        kl1 = "if (obj1[i][0] !== d1 amp;amp; row > -1) continue;";
        v(kl1);
    }

    if(d2 != null || d2 != undefined){
        var kl = "if (obj1[i][1] !== d2 amp;amp; row > -1) continue;"
        v(kl);
    }

    function v(data){
        for (var i = 0; i < obj1.length; i  ) {
                data;
            row  ;
        var newTr = table.insertRow(-1);
        newTr.insertCell(-1).appendChild(document.createTextNode(obj1[i][1]));
        newTr.insertCell(-1).appendChild(document.createTextNode(obj1[i][2]));
        newTr.insertCell(-1).appendChild(document.createTextNode(obj1[i][3]));
        newTr.insertCell(-1).appendChild(document.createTextNode(obj1[i][4]));
        newTr.insertCell(-1).appendChild(document.createTextNode(obj1[i][5]));
    }
}
});
  

Комментарии:

1. Почему ваше if утверждение заключено в кавычки "" . И что, как вы ожидаете, произойдет, если continue вызывается

2. if оператор действует как фильтр, он допускает только те значения, которым присвоен d1 or d2 , например, если d1=1 он напечатает только 1, а не все значения в таблице

3. У вас опечатка в вашем первом операторе if. Вы должны были указать параметр kl1 для v функции, а не kl

Ответ №1:

Я думаю, это то, что вы хотите. Способ, которым вы собираетесь перейти statement к loop , на самом деле не работает.

Мы можем упростить следующий код

 d1 != null || d1 != undefined
  

с помощью javascript, правдивого и ложного

Смотрите код ниже:

 $("#session_id, #start_date").on('change', function() {
    var d1 = $( "#session_id" ).val();
    var d2 = $( "#start_date" ).val();

    $("#tbody").empty();

    for (var i = 0; i < obj1.length; i  ) {
        if (d1 amp;amp; obj1[i][0] !== d1 amp;amp; row > -1) continue;
        if (d2 amp;amp; obj1[i][1] !== d2 amp;amp; row > -1) continue;
        row  ;
        var newTr = table.insertRow(-1);
        newTr.insertCell(-1).appendChild(document.createTextNode(obj1[i][1]));
        newTr.insertCell(-1).appendChild(document.createTextNode(obj1[i][2]));
        newTr.insertCell(-1).appendChild(document.createTextNode(obj1[i][3]));
        newTr.insertCell(-1).appendChild(document.createTextNode(obj1[i][4]));
        newTr.insertCell(-1).appendChild(document.createTextNode(obj1[i][5]));
    }
});
  

Ответ №2:

Просто удалите инструкции из значений и преобразуйте их в Boolean и передайте в function

 if(d1 != null || d1 != undefined){
        kl1 = obj1[i][0] !== d1 amp;amp; row > -1
        v(kl1);
    }

    if(d2 != null || d2 != undefined){
        var kl = obj1[i][1] !== d2 amp;amp; row > -1
        v(kl);
    }

    function v(data){
        for (var i = 0; i < obj1.length; i  ) {
                if(data) continue;
            row  ;
            var newTr = table.insertRow(-1);
            newTr.insertCell(-1).appendChild(document.createTextNode(obj1[i][1]));
            newTr.insertCell(-1).appendChild(document.createTextNode(obj1[i][2]));
            newTr.insertCell(-1).appendChild(document.createTextNode(obj1[i][3]));
            newTr.insertCell(-1).appendChild(document.createTextNode(obj1[i][4]));
            newTr.insertCell(-1).appendChild(document.createTextNode(obj1[i][5]));
        }
    }
  

Комментарии:

1. если я удаляю "" из инструкций if, я получаю ошибку Uncaught SyntaxError: Unexpected token if

Ответ №3:

Присвоение, которое вы даете для k1, является строковым. Вот почему вместо передачи continue он передает инструкцию целиком. Пожалуйста, найдите ниже способ, которым вы можете это сделать.

 if(d1 != null || d1 != undefined){
    if (obj1[i][0] !== d1 amp;amp; row > -1) kl = "true";
    v(kl);
}

if(d2 != null || d2 != undefined){
    if (obj1[i][1] !== d2 amp;amp; row > -1) kl =  "true"
    v(kl);
}

function v(data){
    for (var i = 0; i < obj1.length; i  ) {
            if(data=="true") continue
        row  ;
    var newTr = table.insertRow(-1);
    newTr.insertCell(-1).appendChild(document.createTextNode(obj1[i][1]));
    newTr.insertCell(-1).appendChild(document.createTextNode(obj1[i][2]));
    newTr.insertCell(-1).appendChild(document.createTextNode(obj1[i][3]));
    newTr.insertCell(-1).appendChild(document.createTextNode(obj1[i][4]));
    newTr.insertCell(-1).appendChild(document.createTextNode(obj1[i][5]));
}
  

Комментарии:

1. если вы присваиваете переменной оператор if, это выдает ошибку Uncaught SyntaxError: Unexpected token if

2. Сделайте это таким образом, если (obj1[i][0] !== d1 amp;amp; row > -1) kl = «true»;