或条件

时间:2014-05-09 07:32:43

标签: javascript conditional conditional-statements

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

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)

4 个答案:

答案 0 :(得分:2)

你可以尝试这样的事情。

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

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

答案 1 :(得分:1)

由于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

答案 2 :(得分:1)

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

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);
}

答案 3 :(得分:0)

这样的事情怎么样?

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')
}