我应该摆脱继续声明

时间:2016-02-15 00:00:52

标签: javascript jquery loops if-statement

我已阅读in this Q&A,通常应避免在循环中使用continue语句。下面的代码是否值得遵守规则?如果是的话,重构它以摆脱它们的最佳方法是什么?

    for (property in formInput) {
        if (!formInput.hasOwnProperty(property) || property === "Id") {
            continue;
        }
        if (property.slice(-3) === "_Id") {
            setMagicSuggestFromFormInput(property);
            continue;
        }
        if (property.slice(-3) === "_bl" && formInput[property] === true) {
            $("#" + property).prop("checked", true);
            continue;
        }
        $("#" + property).val(formInput[property]);
    }

编辑:如果您认为循环必须重构,除了说明如何完成之外,您能否告诉我为什么您认为重构的设计选择更好?

5 个答案:

答案 0 :(得分:0)

为什么不尝试"否则,如果" s?

$("#" + property).val(formInput[property]);
在else语句中确保在其中一个else语句运行时不会运行。如果声明,你还要制作其余的if语句。

答案 1 :(得分:0)

当你在开头使用break / continue时,它们作为一个前提条件,这是一个很好的设计,有助于轻松理解块。如果您在块的中间使用continuebreak并使用一些代码,那么它就像一个隐藏的陷阱,很难理解哪个是坏的。

您可以查看此链接,了解有关中断/继续https://softwareengineering.stackexchange.com/questions/58237/are-break-and-continue-bad-programming-practices

的更多讨论

您可以使用嵌套的if else块来尝试这样的事情。

for (property in formInput) {
  if (formInput.hasOwnProperty(property) && property !== "Id") {
    var propVal = property.slice(-3);
    if (propVal === "_Id") {
      setMagicSuggestFromFormInput(property);
    } else if (propVal === "_bl" && formInput[property]) {
      $("#" + property).prop("checked", true);
    } else {
      $("#" + property).val(formInput[property]);
    }
  }
}

答案 2 :(得分:0)

如果不想使用continue语句,那么你可以使用嵌套代码的路径:

for (property in formInput) {
    if (formInput.hasOwnProperty(property) && property !== "Id") {
        if (property.slice(-3) === "_Id") {
            setMagicSuggestFromFormInput(property);
        }
        else if (property.slice(-3) === "_bl" && formInput[property] === true) {
            $("#" + property).prop("checked", true);
        }
        else{
           $("#" + property).val(formInput[property]);
        }
    }
}

我非常喜欢你所链接的Q& A的答案。这是一个工具,您应该在适当的时候使用它。

答案 3 :(得分:0)

您可以嵌套条件检查并反转条件。

for (property in formInput) {
    if (formInput.hasOwnProperty(property) && !property === "Id")
        if (property.slice(-3) === "_Id") {
            setMagicSuggestFromFormInput(property);
        else if (property.slice(-3) === "_bl" && formInput[property] === true)
            $("#" + property).prop("checked", true);
        else
            $("#" + property).val(formInput[property]);
    }
}

答案 4 :(得分:0)

您的代码:

for (property in formInput) {
    if (!formInput.hasOwnProperty(property) || property === "Id") {
        continue;
    }
    if (property.slice(-3) === "_Id") {
        setMagicSuggestFromFormInput(property);
        continue;
    }
    if (property.slice(-3) === "_bl" && formInput[property] === true) {
        $("#" + property).prop("checked", true);
        continue;
    }
    $("#" + property).val(formInput[property]);
}

相当于:

for (property in formInput) {
    if (property.slice(-3) === "_Id") {
        setMagicSuggestFromFormInput(property);
    } else if (property.slice(-3) === "_bl" && formInput[property] === true) {
        $("#" + property).prop("checked", true);
    } else if (formInput.hasOwnProperty(property) && property !== "Id") {
        $("#" + property).val(formInput[property]);
    }
}

这是首选方法,因为它正确使用if/then/else并且更容易在逻辑上推理。