对 else-if“组”进行操作

问题描述 投票:0回答:1

我有一个这样的模式,但我不知道在 JavaScript 中处理它的好方法

let i = Math.floor(5 * Math.random())

if (i == 0) {
    console.log('a')
    console.log('+')
}
else if (i == 1) {
    console.log('b')
    console.log('+')
}
else if (i == 2) {
    console.log('c')
    console.log('+')
}
else if (i == 3) {
    console.log('d')
    console.log('-')
}
else if (i == 4) {
    console.log('e')
    console.log('-')
}

我正在使用多个 else-if 语句,并希望在满足“组”的条件之一时执行操作。

(考虑所有条件检查完全不同)

该项目非常小。这部分是其核心,将被称为许多 次。对性能的任何影响都很重要,所以我避免使用任何不必要的 变量定义或对象、数组创建。捆绑包的大小很重要 还有。

我知道如果我使用一些数据结构,差异不会那么大 跟踪状态并执行相应的操作,但是,我认为这 一个非常整洁且高性能。检查一下:

let i = Math.floor(5 * Math.random()),
    skipped = false

if (i == 0) {
    console.log('a')
}
else if (i == 1) {
    console.log('b')
}
else if (i == 2) {
    console.log('c')
}
else if ((skipped = true) && false) {}
else if (i == 3) {
    console.log('d')
}
else if (i == 4) {
    console.log('e')
}

if (skipped) console.log('-')
else console.log('+')

唯一可以在不破坏

else if
的情况下进行手术的地方 链是另一个
else if
块的支票。然后我必须添加
&& false
来保留 链条运转。我分享是为了看看你会如何处理这种情况,确实如此 工作完美,但我觉得我违反了一些规定:D 也有点震惊 当我发现这种情况是多么罕见时。或许他们没有想到 语言本身就需要此功能。


对于 switch-case 语句,这可以在没有奇怪的赋值位置的情况下完成:

switch (i) {...}
skipped = true
switch (i) {...}

因为他们检查确切的字符串并且只有一个可以匹配,所以如果我们 对

case
进行唯一的硬编码。但是对于
else if
语句,如果我打破其中之一 他们并重新开始,在解雇了一个之后可以再解雇另一个
else if
在上面的链中。由于它们不在同一链中,因此没有任何限制。 正如我所说,所有条件都是不同的,因此可以有多个条件 true(与独特的硬编码开关情况不同)。

顺便说一句,即使这可以通过开关实现:

switch (i) {
    // ...
    case i:
        skipped = true
    // ...
    case i: 
        skipped = idk
}

而且在整个过程中,这不仅仅是一分为二的事情。我可以给一个号码 到

skipped
并在接下来的
if
中使用它来进行相应的操作。 为了简单起见,我使用了布尔值。


那么,有没有更好的方法来对“群体”进行操作呢?我不认为用作业代替条件检查是一个好的做法(无需说这不是最好的),但同时,我找不到任何更好的方法

if-statement switch-statement
1个回答
-1
投票

为了在 JavaScript 中更有效地处理这种模式,您可以使用数组

const characters = ["a","b","c","d","e"];
const randomIndex = Math.floor(Math.random() * characters.length);
const selectedChar = characters[randomIndex];
const operator = (selectedChar >='a' && selectedChar <= 'c') ? "+" : "-";

console.log(selectedChar);
console.log(operator)
© www.soinside.com 2019 - 2024. All rights reserved.