Javascript 检查三分之二的布尔值是否正确?

Javascript 检查三分之二的布尔值是否正确?,javascript,boolean,Javascript,Boolean,我需要测试三分之二的布尔值是否正确 大概是这样的: if((a && b && !c) || (a && !b && c) || (!a && b && c)){ //success } 这是最直接的方法吗?有人知道捷径/速记吗 您可以将这些布尔值转换(强制转换)为整数,然后将它们相加。然后检查它是否等于2。像这样(C): 编辑: 对于JavaScript,您甚至不需要强制转换值: const r

我需要测试三分之二的布尔值是否正确

大概是这样的:

if((a && b && !c) || (a && !b && c) || (!a && b && c)){
 //success
}
这是最直接的方法吗?有人知道捷径/速记吗

您可以将这些布尔值转换(强制转换)为整数,然后将它们相加。然后检查它是否等于2。像这样(C):

编辑:

对于JavaScript,您甚至不需要强制转换值:

const res = a + b + c
if (res == 2) { /* Do something... */ }

如果添加这些值,可以检查结果是否为2

if ((a + b + c) == 2) {
    // do something
}

如果您试图多次查看三分之二的布尔值是否为真,则可以使用函数来缩短代码

功能增强测试(a、b、c){
如果((a&&b&&c)| |(a&&b&&c)| |(!a&&b&&c)){
返回真值
}否则{
返回错误
}

}
要检查两个值是否正好等于
真值

[a, b, c].filter(Boolean).length === 2;
参考资料:

我会这样做:


你甚至不需要转换它们

let a = true;
let b = true;
let c = false;

if(a + b + c === 2) {
    console.log('You won!');
} else {
    console.log('Not 2');
}
在JavaScript(以及大多数其他现代编码语言)中,布尔变量可以存储为二进制整数(
1
0
),这些整数可以用作布尔值。请参见此示例:

if(1){
console.log(“1为真”);
}否则{
控制台日志(“1为假”);
}
如果(0){
console.log(“0为真”);
}否则{
console.log(“0为假”);
}
a=true;
b=正确;
c=假;
arr=[a,b,c]
结果=arr.reduce((acc,cur)=>acc+cur)==2;

控制台日志(结果)检查是的,我看到了那个,但我的问题不同,因为那个案例“至少”有两个。。。这意味着第三个也可能是真的,但在我的情况下不是。你的答案几乎是正确的,但这是Javascript而不是C,所以你的语法是错误的。:)@基思更新了答案谢谢。我忘了认为JORANS在JS中只有1和0。你能解释一下为什么吗?@ RichardAyotte在英国,如果你这么做,程序员可能有理由不公平解雇……如果您将它放在一个具有有用名称的函数中,它是不言自明的。我刚刚回答了他的问题,并假设他会将代码放入一个函数中。@RichardAyotte
cacophemism
是的,我明白了,笑的原因。。这不是一个真正的把戏,这只是JS是如何的,但你关于显而易见的观点是完全正确的。做
Number(a)+Number(b)+Number(c)
虽然时间更长,但会让其他程序员更容易了解您的意图。我完全支持程序员编写易于理解的代码。嗯,这仍然可以转换代码。(我并不认为这是一个糟糕的解决方案,但显然有人不喜欢它。)这里的转换不是由
==
完成的,而是
+
隐式地将布尔值转换为数字。(一般来说,我认为
+
会将另一个参数转换为字符串,如果其中一个参数已经是字符串,则会将它们转换为数字。)
let conditions = [a && b && !c, a && !b && c, !a && b && c]
if(conditions.filter(c => c).length === 2) { /* ... */}
let a = true;
let b = true;
let c = false;

if(a + b + c === 2) {
    console.log('You won!');
} else {
    console.log('Not 2');
}