(JavaScript) 最好是检查多个条件并在一个 returns 错误时立即结束执行?

(JavaScript) Best was to check for multiple conditions and end execution as soon as one returns false?

我目前正在开发一个值班应用程序。我需要计算哪个员工可以在每个月的每一天工作。这也必须“即时”更新,因为如果某人在第 1 天被分配工作,he/she 例如不能在第 2 天工作。

某人能否在一天工作取决于多种条件。 我的想法是,有一个“控制器”功能来检查是否有任何“条件”功能 returns false = 那意味着那个人那天不可用。

我喜欢简单地将 return 值相乘的方法,例如

const controller = (day, employee) => {
  return (
   cond1(day, employee) * 
   cond2(day, employee) * 
   cond3(day, employee) * 
   cond4(day, employee) * 
   cond5(day, employee)
  )
}

因为 true == 1 和 false == 0 一旦一个条件为假,它 returns 0。但我认为这可能不是最有效的方法,因为它会检查所有条件。一旦一个条件为假,我正在寻找一种方法 return。

我可以使用 if-else 但这会很快变得不可读的条件地狱

如果第一个值为false

&&会短路。试试这个:

function foo() {
  console.log('called foo');
  return false;
}
function bar() {
  console.log('called bar');
  return true;
}

foo() && bar()

输出应该仅为called foo。短路意味着布尔表达式只会计算它需要的数量;如果 && 的左边为假,则表达式为假,右边不需要求值。 请注意,|| 也会发生这种情况,但方式相反:如果表达式的左侧为 true,则不会计算右侧。

如果所有函数都采用与您的示例所暗示的完全相同的参数,您可以使用 [].every,它也通过提前结束迭代来“短路”。不过,对于您的具体示例,我会警告不要这样做,因为即使其中一个 cond 函数采用不同的参数,它也会使事情难以维护。

[cond1, cond2, cond3, cond4, cond5].every((cond) => cond(day, employee))