Javascript:单个条件中的多个条件' if'声明,比较多组值

时间:2014-09-19 16:57:47

标签: javascript if-statement

我正在为预订流程构建应用。我有一堆可选选项,其值保存,用户将移动到该过程的下一步。选项编号为0-6。 0-4可以被认为是一个'组',而选项5& 6是一个单独的'组'。现在,我需要做的是,如果用户改变主意并返回并选择属于不同组的新选项,那么它将触发一些功能。见下图:

0 }
1 }
2 } --- 0 -4 is the first 'group'
3 }
4 }

5 } --- 5 & 6 can be thought as a different 'group'
6 }

我试图用if语句复制这个逻辑。我有以下代码,但它似乎不起作用:

                if((((c_sav === 4 || c_sav === 5) && (val_c !== 4 && val_c !== 5)) 
                   || ((c_sav !== 4 && c_sav !== 5) && (val_c === 4 || val_c === 5)))){
                    // Some logic...
                }

从用户第一次进行选择时,变量名称只是c_sav =已保存选项。 val_c =新选择的选项。

有人能说出我可能做错了吗?

编辑好的,也许我不够清楚。如果用户从第一组中选择任何选项(0-4),则返回并从同一组中选择任何选项,0-4,然后我不在乎。但是如果在这种情况下他们选择5或6(在第二组中),那么我想评估为真(即触发函数)。 相反如果他们第一次选择5或6,那么回去再选择5或6,我不在乎,但如果在这种情况下,他们选择了0,1,2,3或4,然后我想触发这个功能。

我不知道如何更清楚地解释它......!

1 个答案:

答案 0 :(得分:0)

您可以通过多种方式处理此问题。鉴于0..4是一个组而5,6是另一个组,最简单的解决方案如下:

if((c_sav <= 4 && val_c > 4) || (c_sav > 4 && val_c <= 4)) {
    // Do something
} 

这可能就是您所需要的全部内容,但如果您的群组边界发生变化(或某些方式选择了某些方式),它就不会非常强大或易于维护。一个更好的选择可能是这样的:

var groups = [ 1, 1, 1, 1, 1, 2, 2];

所以你可以这样做:

if (groups[c_sav] !== groups[val_c]) {
   // Do something
}

或者你可以使用一个对象,它可以提供更多的灵活性:

var groups = { 0: 1, 1: 1, 2: 1, 3: 1, 4: 1, 5: 2, 6: 2 };

可以使用相同的方式。但是,如果您的选项是数字(可以使用字符串键)或不连续,则该对象会更容易。

最好的选择是,c_savval_c中的任何内容都是具有group属性的对象。然后你只是比较它们:

if (c_sav.group !== val_c.group) {
    // Do something
}