【问题标题】:Is there a faster, easier way to write several if statements with multiple AND conditions?是否有一种更快、更简单的方法来编写具有多个 AND 条件的多个 if 语句?
【发布时间】:2019-11-15 11:08:43
【问题描述】:

有没有一种简单的方法可以满足所有可能的组合,而无需手动编写所有这些 if 语句?

var ups;
var trans;
var sat;
var kplc;

 if(ups === 'false' && trans ==='true'&& sat ==='true' && kplc ==='true'){
            //do something
}
 if(ups === 'true' && trans ==='true'&& sat ==='true' && kplc ==='true'){
            //do something
}
 if(ups === 'false' && trans ==='false'&& sat ==='true' && kplc ==='true'){
            //do something
}
 if(ups === 'false' && trans ==='true'&& sat ==='false' && kplc ==='true'){
            //do something
}
////and so forth and so forth....

【问题讨论】:

  • 我只看到一个if 声明..?你的意思是每个组合都有一个吗?
  • 为什么是这些字符串?
  • 这个问题的答案取决于需求。如果要为您的四个布尔值的每个组合发生不同的事件,那么您需要所有分支。但是,如果可以以某种方式对要采取的行动进行分组,那么答案就会不同。
  • 为了减少代码,我会先将其转换为布尔值,然后说if (!ups && trans && sat && kplc)。如果您需要将它们作为字符串,那么我认为没有比创建一些函数以使代码更具可读性更好的选择了。同样不是那么好。
  • 我们无法在这里告诉您答案,尽管您提供的内容是编程的基本要素,能够通过您编写的代码找到最少必要数量的路径。如果您到目前为止发布了您的十个,我们也许可以指导您。

标签: javascript loops if-statement conditional-statements


【解决方案1】:

如果您需要检查所有值是否都通过相同的谓词,您可以将所有值放在一个数组中并使用 Array.prototype.every。

let foo = true
let bar = true
let baz = false

if ([foo, bar, baz].every(value => value === true)) {
  console.log('condition passed')
}

同样要检查其中至少一个是否通过谓词,请使用 Array.protoype.some

let foo = true
let bar = true
let baz = false

if ([foo, bar, baz].some(value => value === true)) {
  console.log('condition passed')
}

【讨论】:

  • 这是一个有趣的解决方案,让我试试
  • 有没有办法打印出同样正确的变量?
  • findIndex。但老实说,foo && bar && bazfoo + bar + baz > 1 更短更实用。
  • 这只会查看 foo、bar 和 baz 是否全部为真,或者至少其中一个为真。那只是2个结果。我相信这个问题正在寻找一个答案,告诉我们哪些变量是正确的。
猜你喜欢
  • 2021-12-15
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2022-11-01
  • 2012-02-16
相关资源
最近更新 更多