首页 > 解决方案 > JavaScript - If 语句中的 3 个布尔运算符

问题描述

好的,所以有三个布尔值。一次只能有一个布尔值为真。如果其中一个布尔值已经为真,如果条件满足它应该保持真,它不应该恢复为假。请注意,默认情况下 activeCrate1 应为true

当条件达到 activeCrate2 时,它为真,所有其他布尔值都为假。

当条件达到 activeCrate3 时,它为真,所有其他布尔值都为假。

但是我如何点击activeCrate1,并再次将其返回为true,而所有其他布尔值都应该为false?

例如,如果条件达到了已经为True的 activeCrate1 ,它应该保持为真并且什么都不应该改变。我怎样才能让它这样工作?

一共两个问题,但需要在同一个代码中实现。

我的代码如下所示:

activeCrate1: true,
activeCrate2: false,
activeCrate3: false

if (state.activeCrate2 === false ) {
    state.activeCrate2 = true
    state.activeCrate1 = false;
    state.activeCrate3 = false;
  } else if (state.activeCrate3 == false){
    state.activeCrate3 = true;
    state.activeCrate1 = false;
    state.activeCrate2 = false;

标签: javascriptif-statementbooleancomparison

解决方案


如果我理解正确,您希望列表中只有一个活动项目,并让它随时间变化。

我认为避免使用 ifs 控制每种情况会更容易,因为每次您想要添加 activeCrate 时都会很容易留下错误。

让我重新表述一下我认为您所说的内容:

  1. 我想要一个默认布尔值的初始列表,其中第一项设置为 true。
  2. 我想更新列表。
  3. 如果所选项目与之前相同,我什么都不做。
  4. 找到之前的真值并将其设置为假。
  5. 将新项目设置为 true。

这是我写的 es5 javascript 等价物:

var activeCrates = [true, false, false];

function setActiveCrate(index) {
    // Short circuit code when the same crate is active
    if (activeCrates[index] === true) {
        return;
    }

    // Find previous active crate in order to set it to false
    var previousActiveCrate = activeCrates.indexOf(true);
    activeCrates[previousActiveCrate] = false;

    // Set current active crate to true
    activeCrates[index] = true;
}

另请注意,我改变了 activeCrates 数组。


推荐阅读