【问题标题】:JavaScript - 3 Boolean operators in If statementJavaScript - If 语句中的 3 个布尔运算符
【发布时间】:2018-11-30 19:32:58
【问题描述】:

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

【问题讨论】:

  • 我不明白这个问题。你陈述它应该如何表现的确切步骤,然后询问如何去做。你从字面上说:“如果条件达到......它应该保持真实”。那么然后写一个if 语句不改?
  • 请添加一些用例并将问题分成几部分。
  • 你只需要一个 else{ activeCrate1: true, activeCrate2: false, activeCrate3: false, } 在 else if 之后。我想这就是你想要的
  • 我的代码适用于activeCrate2和activeCrate3,但是activeCase1的情况不能正常工作,所以我没有在代码中包含它。
  • 只有一个布尔值可以为真,当它发生时,所有其他值都应该为假。如果 activeCrate1 已经是 True,如果相同的条件连续两次或无限次命中它,它应该保持 True,因此它不会恢复其中的 True-False 值。

标签: javascript if-statement boolean comparison


【解决方案1】:

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

我认为避免使用 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 数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-31
    • 2014-05-30
    • 2015-01-07
    • 2022-09-29
    • 1970-01-01
    • 2023-01-19
    • 2013-03-26
    • 2013-08-07
    相关资源
    最近更新 更多