多组OR

时间:2015-12-08 21:50:10

标签: javascript

我觉得这不可能吗?我试图在这里检查一组条件,我的测试应该在我从其他两个方法移出其中几个方法之后传递到下面的if语句中,以便将所有检查组合成一个if语句:

 if ((move.coordinates.x === 0 && move.coordinates.y === 0 ||
        move.coordinates.x === 0 && move.coordinates.y === 1 ||
        move.coordinates.x === 0 && move.coordinates.y === 2) 
        ||

        (move.coordinates.x === 1 && move.coordinates.y === 0 ||
        move.coordinates.x === 1 && move.coordinates.y === 1 ||
        move.coordinates.x === 1 && move.coordinates.y === 2) 
        ||

        (move.coordinates.x === 2 && move.coordinates.y === 0 ||
        move.coordinates.x === 2 && move.coordinates.y === 1 ||
        move.coordinates.x === 2 && move.coordinates.y === 2))
   {
      ...then do something
   }

在分离出条件集时,看起来似乎没有什么区别。

我试图减少重复的代码我在不同的方法中使用了3组,其中逻辑大致相同,但检查了不同的状态。

所以我粘贴了另外两个状态集(集合意味着组成一个给定状态的3个组)并试图基本上在一个方法中检查这3行而不是分成3来减少重复代码。

3 个答案:

答案 0 :(得分:3)

简化符号,你有

(x == 0 && y == 0    ||    x == 0 && y == 1    ||    x == 0 && y == 2)
||
(x == 1 && y == 0    ||    x == 1 && y == 1    ||    x == 1 && y == 2)
||
(x == 2 && y == 0    ||    x == 2 && y == 1    ||    x == 2 && y == 2)

由于运算符||是关联的,因此您可以删除括号。

然后您可以使用分配属性对x进行分组。

x == 0 && (y == 0 || y == 1 || y == 2) ||
x == 1 && (y == 0 || y == 1 || y == 2) ||
x == 2 && (y == 0 || y == 1 || y == 2)

甚至再次使用分配属性

(x == 0 || x == 1 || x == 2) && (y == 0 || y == 1 || y == 2)

最后,您可以将允许的值存储在数组中,并使用indexOf来避免重复变量:

var values = [0, 1, 2];
values.indexOf(x) >= 0 && values.indexOf(y) >= 0;

答案 1 :(得分:3)

您可以使用涵盖您允许的所有可能性的逻辑规则。如果你查看代码中的重复值,你会发现你试图用x值0,1,2的组合耗尽x值0,1,2的所有组合。因此,如果您创建的规则将包含0到2之间的x值以及y值从0到2的相同值,则可以像下面的示例一样简化if语句。

try
  allHellBreaksLoose()
  catsAndDogsLivingTogether()
catch error
  print error
finally
  cleanUp()

答案 2 :(得分:0)

我在代码中看到的一个问题是操作顺序(看看here以查看基础知识),考虑使用更多括号尽可能明确。看起来你想要这样做:

 if (( (move.coordinates.x === 0 && move.coordinates.y === 0) ||
    (move.coordinates.x === 0 && move.coordinates.y === 1) ||
    (move.coordinates.x === 0 && move.coordinates.y === 2)) 
    ||
    ...

但是,如果你想要更高效一点,我建议用嵌套的if语句重新格式化你的逻辑:

if (x==0 || x==1 || x==2)
{
  if(y==0 || y==1 || y==2)
  {
    do something...