【问题标题】:And Or Conditions和或条件
【发布时间】:2014-05-09 16:38:42
【问题描述】:

我目前有一个相当大的条件:

a[i1][i2 + 1] == '1' || a[i1][i2 - 1] == '1' || a[i1 + 1][i2] == '1' || a[i1 - 1][i2] == '1'

这很好用,但我刚刚意识到这只是我需要的一半。基本上我需要至少两个条件是true是否有简单的方法来完成此操作,还是我必须根据需要重写整个内容?

通过以下方式展示我的意思的一种简单方法。

假设我有三个条件:a、b 和 c。简而言之,我需要的是(a&&b) || (a&&c) || (b&&c)

【问题讨论】:

  • 你试过看看它是否有效?
  • 我不确定您要的是什么。你想简化表达式吗?你可以做a && (b || c) || b && c。除此之外,不要在条件中多次重新计算a[i1][i2 + 1] == '1',只需执行一次并将值分配给一个变量。
  • 我看到您的值与“1”进行了比较,其他可能的值是什么?
  • @aduch 因为我在 1 和 0 之间进行比较,并且因为我只需要 1,所以它是我唯一的值。
  • 然后在下面查看 Özgür Kaplan 的回答,我认为这很好

标签: javascript conditional conditional-statements


【解决方案1】:

你可以试试这样的。

var numberOfTrue=Number(a[i1][i2 + 1] == '1')+ Number(a[i1][i2 - 1] == '1'); // +....
if(numberOfTrue>=2){
//TODO
}

http://jsbin.com/wasuwoxe/1/edit

【讨论】:

  • 这是我想到的,但只有当另一个可能的值为 '0' 或 0 时才有效
  • 好像是这样,+1
【解决方案2】:

由于true+true+false === 2,你可以简单地说:

   ((a[i1][i2 + 1] == '1') +
    (a[i1][i2 - 1] == '1') +
    (a[i1 + 1][i2] == '1') +
    (a[i1 - 1][i2] == '1'_) >= 2

【讨论】:

  • 这不正是@ÖzgürKaplan 所做的只是格式不同吗?
  • 是的,是同一个想法。但是不需要 Number(..) 包装器,所以我认为这个答案看起来更整洁。
【解决方案3】:

另一种方法是利用数组来存储匹配的条件。这样,您仍然可以定义评估为 true 的内容,并使用数组来存储匹配的条件并在之后查看。

var matched = [];

if (a[i1][i2 + 1] == '1') matched.push({x: i1, y: i2 + 1});
if (a[i1][i2 - 1] == '1') matched.push({x: i1, y: i2 - 1});
if (a[i1 + 1][i2] == '1') matched.push({x: i1 + 1, y: i2});
if (a[i1 - 1][i2] == '1') matched.push({x: i1 - 1, y: i2});

if (matched.length >= 2) {
    console.log('These matched!', matched);
}

【讨论】:

    【解决方案4】:

    这样的事情呢?

    var o = i1 + 1;
    var p = i1 - 1;
    var q = i2 + 1;
    var r = i2 -1;
    a[i1][q] == '1' || a[i1][r] == '1' || a[o][i2] == '1' || a[p][i2] == '1'
    

    或类似的东西:

    var a; // you should init this array in somewhere else above
    
    function isValid(i1, i2){
    
    return (a[i1][i2 + 1] == '1' || a[i1][i2 - 1] == '1' || a[i1 + 1][i2] == '1' || a[i1 - 1][i2] == '1')
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-02
      • 2014-11-24
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      • 1970-01-01
      相关资源
      最近更新 更多