我目前有一个相当大的条件:
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)
答案 0 :(得分:2)
你可以尝试这样的事情。
var numberOfTrue=Number(a[i1][i2 + 1] == '1')+ Number(a[i1][i2 - 1] == '1'); // +....
if(numberOfTrue>=2){
//TODO
}
答案 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')
}