重构javascript if语句

重构javascript if语句,javascript,Javascript,我有一个不寻常的嵌套if语句,其中执行某些代码需要第三个条件,但这个条件独立于我的else子句。因此,我将这个条件嵌套在外部2个条件中。下面的工作,因为它应该,但我不肯定这是最好的方式来处理这样的情况。我应该使用另一种方法还是以我没有想到的方式重构它 if ($('#preferred-contact').prop('selectedIndex') == index && !$(selector).val()) { if (!$(label).parent().hasCl

我有一个不寻常的嵌套
if
语句,其中执行某些代码需要第三个条件,但这个条件独立于我的
else
子句。因此,我将这个条件嵌套在外部2个条件中。下面的工作,因为它应该,但我不肯定这是最好的方式来处理这样的情况。我应该使用另一种方法还是以我没有想到的方式重构它

if ($('#preferred-contact').prop('selectedIndex') == index && !$(selector).val())
{
    if (!$(label).parent().hasClass('has-error')) {
        $(selector).after("<span class='help-block form-error'>Required Field</span>");
        $(label).parent().addClass('has-error');
    }
}
else {
    $(selector + ' + .help-block').remove();
    $(label).parent().removeClass('has-error');
}
if($('#首选联系人').prop('selectedIndex')==index&!$(selector.val())
{
if(!$(label.parent().hasClass('has-error')){
$(选择器)。之后(“必填字段”);
$(label.parent().addClass('has-error');
}
}
否则{
$(选择器+'+.help块').remove();
$(label.parent().removeClass('has-error');
}

如果条件很好,您使用条件句的方式是正确的。但是,如果您坚持要消除内部条件,您可以向后重写它,并在以下情况下使用

if ($('#preferred-contact').prop('selectedIndex') != index || $(selector).val())
{
    $(selector + ' + .help-block').remove();
    $(label).parent().removeClass('has-error');
}
else if (!$(label).parent().hasClass('has-error')) {
    $(selector).after("<span class='help-block form-error'>Required Field</span>");
    $(label).parent().addClass('has-error');
}
if($('#首选联系人').prop('selectedIndex')!=index | |$(选择器).val())
{
$(选择器+'+.help块').remove();
$(label.parent().removeClass('has-error');
}
else if(!$(label.parent().hasClass('has-error')){
$(选择器)。之后(“必填字段”);
$(label.parent().addClass('has-error');
}

您的第一个
if
语句有第二个
if
语句,但没有其他代码

为什么只为它创建一个条件

let myCondition = index === $('#preferred-contact').prop('selectedIndex') && !$(selector).val();

if (myCondition && !$(label).parent().hasClass('has-error'))
{
    $(selector).after("<span class='help-block form-error'>Required Field</span>");
    $(label).parent().addClass('has-error');
}
else if (!myCondition)
{
    $(selector + ' + .help-block').remove();
    $(label).parent().removeClass('has-error');
}
让myCondition=index==$('preferredcontact').prop('selectedIndex')&&$(选择器).val();
if(myCondition&!$(label).parent().hasClass('has-error'))
{
$(选择器)。之后(“必填字段”);
$(label.parent().addClass('has-error');
}
否则,如果(!myCondition)
{
$(选择器+'+.help块').remove();
$(label.parent().removeClass('has-error');
}

这样可以减少并改进代码。在每种语言中,您都应该使用尽可能低的嵌套级别进行编码。

不,基本上就是这样做的。这不是堆栈溢出的问题。在gee处理得最好谢谢所有的帮助@ScottMarcus你是其中一个很好的人为什么是downwote?我遗漏了什么吗?请不要首先回答不属于堆栈溢出的问题。它只会鼓励更多同样的问题,并稀释问题的质量。@ScottMarcus如果有人寻求帮助,而任何人都能回答,那么它就是正确的提问地点。这就是stackoverflow的意义。不,不是真的。堆栈溢出已经存在,这就是为什么我们有“关闭”选项可供具有足够代表性的成员使用。这个问题是“离题”的,不应该发布到SO。@ScottMarcus确定有指导原则。然而,imho SO更多的是帮助人们,而不是对内容进行分类。实际上,这与原始代码的作用不同。想象一下第一个条件得到满足,而内部条件不满足的用例,你是对的!我以前的代码不尊重原来的帖子。谢谢:)我编辑我的帖子是为了尊重子条件。请不要首先回答不属于堆栈溢出的问题。它只会鼓励更多同样的问题,并稀释问题的质量。