我有一个这样的模式,但我不知道在 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('-')
}
(考虑所有条件检查完全不同)
该项目非常小。这部分是其核心,将被称为许多 次。对性能的任何影响都很重要,所以我避免使用任何不必要的 变量定义或对象、数组创建。捆绑包的大小很重要 还有。
我知道如果我使用一些数据结构,差异不会那么大 跟踪状态并执行相应的操作,但是,我认为这 一个非常整洁且高性能。检查一下:
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
中使用它来进行相应的操作。
为了简单起见,我使用了布尔值。
那么,有没有更好的方法来对“群体”进行操作呢?我不认为用作业代替条件检查是一个好的做法(无需说这不是最好的),但同时,我找不到任何更好的方法
为了在 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)