Продолжайте в следующем случае, если значение не является истинным - PullRequest
0 голосов
/ 04 июля 2018

Я написал код, который проверяет некоторые условия.

Но я оступился в этой части. Я использовал continue;, но он не запускается и говорит, что в нем есть ошибка.

if (support_Fixednodes !== undefined && support_Fixednodes !== null){

    if ((arrayIndex.length - 1) === arrayIndex.lastIndexOf("FIXED")){

      var supportFBnode_index = checkIfElementExist(dataTwo, "FIXED");

    }else if ((dataTwo.length - 1) !== dataTwo.lastIndexOf("FIXED")){

      continue; <-- This doesn't work.if this part of IF is true i want it to 
                    jump to the next else if

    }


}else if (check_PinnedSupports.BoleanValue === "Existing"){   <----jump here

  var supportFBnode_index = checkIfElementExist(dataTwo, "PINNED");

}

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

во избежание повторяющихся условных выражений и повторного кода возможно использование малоизвестной конструкции javascript ... the label

в зависимости от того, на что действительно ссылается jump here (до if или тела if)

Итак, перед if (поэтому последний if проверяется независимо)

var supportFBnode_index;
hack: {
    if (support_Fixednodes !== undefined && support_Fixednodes !== null) {
        if ((arrayIndex.length - 1) === arrayIndex.lastIndexOf("FIXED")){
            supportFBnode_index = checkIfElementExist(dataTwo, "FIXED");
            break hack; // DO NOT RUN THE LAST IF
        } else if ((dataTwo.length - 1) === dataTwo.lastIndexOf("FIXED")) { // changed to === so, if !==, next if gets run
            break hack; // DO NOT RUN THE LAST IF
        }
    }
    // the jump in your code refers to this point
    if (check_PinnedSupports.BoleanValue === "Existing") {
        supportFBnode_index = checkIfElementExist(dataTwo, "PINNED");
    }
}

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

var supportFBnode_index;
hack: {
    if (support_Fixednodes !== undefined && support_Fixednodes !== null) {
        if ((arrayIndex.length - 1) === arrayIndex.lastIndexOf("FIXED")) {
            supportFBnode_index = checkIfElementExist(dataTwo, "FIXED");
            break hack; // DO NOT RUN THE LAST ASSIGNMENT
        } else if ((dataTwo.length - 1) === dataTwo.lastIndexOf("FIXED")) { // changed to === to skip last bit
            break hack; // DO NOT RUN THE LAST ASSIGNMENT
        }
    } else if (check_PinnedSupports.BoleanValue !== "Existing") { // changed to !== to skip last bit
        break hack; // DO NOT RUN THE LAST ASSIGNMENT
    }
    // the jump in your code refers to this point
    supportFBnode_index = checkIfElementExist(dataTwo, "PINNED");
}

Таким образом, вместо перехода к точке в коде, если условие выполнено, мы можем break пройти ее, если условие не выполнено

Обратите внимание на объявление var supportFBnode_index; - хотя var supportFBnode_index = в двух местах работает, это не лучшая практика (особенно если вы позже измените var на let) ... так что это подсказка для халявы: p


простой break label пример

hack: {
  console.log('this will output');
  break hack;
  console.log('this wont output');
}
console.log('done');

в основном break label заставляет выполнение пропустить оставшуюся часть помеченного блока

Как я уже сказал, малоизвестная особенность языка, но она имеет свое место - хотя, я уверен, есть и другие способы избежать «повторения» в этом случае, но это, на мой взгляд, самый элегантный

0 голосов
/ 04 июля 2018
Операторы

break и continue должны использоваться в loops, а не в if-else блоках. Вам лучше объединить операторы, используя логические операторы

if ((support_Fixednodes !== undefined && support_Fixednodes !== null) && ((arrayIndex.length - 1) === arrayIndex.lastIndexOf("FIXED"))){

  var supportFBnode_index = checkIfElementExist(dataTwo, "FIXED");

} else if (check_PinnedSupports.BoleanValue === "Existing" || ((support_Fixednodes !== undefined && support_Fixednodes !== null) && ((dataTwo.length - 1) !== dataTwo.lastIndexOf("FIXED")))){

  var supportFBnode_index = checkIfElementExist(dataTwo, "PINNED");

}

Использование оператора || (OR) решит вашу проблему.

EDIT Если вы не возражаете против некоторой избыточности в своем коде, но хотите, чтобы он выглядел чище, просто повторите присвоение значения переменной вместо continue

if (support_Fixednodes !== undefined && support_Fixednodes !== null){

    if ((arrayIndex.length - 1) === arrayIndex.lastIndexOf("FIXED")){

      var supportFBnode_index = checkIfElementExist(dataTwo, "FIXED");

    }else if ((dataTwo.length - 1) !== dataTwo.lastIndexOf("FIXED")){

      var supportFBnode_index = checkIfElementExist(dataTwo, "PINNED");

    }


}else if (check_PinnedSupports.BoleanValue === "Existing"){   <----jump here

  var supportFBnode_index = checkIfElementExist(dataTwo, "PINNED");

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