javascript - 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;
解决方案
如果我理解正确,您希望列表中只有一个活动项目,并让它随时间变化。
我认为避免使用 ifs 控制每种情况会更容易,因为每次您想要添加 activeCrate 时都会很容易留下错误。
让我重新表述一下我认为您所说的内容:
- 我想要一个默认布尔值的初始列表,其中第一项设置为 true。
- 我想更新列表。
- 如果所选项目与之前相同,我什么都不做。
- 找到之前的真值并将其设置为假。
- 将新项目设置为 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 数组。
推荐阅读
- html - 如何使所有块的宽度相同?
- android - Android 线程 postDelayed 不起作用
- c++ - std::string[] 成员释放在构造函数抛出异常期间失败
- tcl - TCL 中“> stdout”和“>@ stdout”的用法差异
- c# - 无法在 C# bot 框架中集成 OpenXML (documentformat.openxml.*),出现错误“Autofac.Core.DependencyResolutionException”
- scala - ObjectMapper readValue(content: String) 如果字符串在 Scala 中为空“”,则给出 MismatchedInputException
- python - 在pyspark中按层次顺序检索行时出现数据框性能问题
- angular - 基于数据源对象数组属性大小的角度材质表行跨列
- spring-boot - 为什么我不能使用 spring-boot-starter-amqp 在消费者端获取correlationId?
- ios - 如何在不重建的情况下在 xcode 中运行单个单元测试方法?