“太多”;或;语句(javascript)

“太多”;或;语句(javascript),javascript,if-statement,conditional-statements,logical-operators,logical-or,Javascript,If Statement,Conditional Statements,Logical Operators,Logical Or,我正在创建一个包含6种不同问题类型的简单数学程序。我想让程序随机显示6种类型中的一种,但有些问题应该更频繁地出现。我使用加权数组,但在从加权数组中选择问题类型后,如果在if语句中不使用10个或更多的“或”命令,我就很难确定它是哪种问题类型。以下是一个简化版本: //shuffle array of 10 integers to get a random value var rand_10 = [0,1,2,3,4,5,6,7,8,9]; fisherYates(rand_10); //Set

我正在创建一个包含6种不同问题类型的简单数学程序。我想让程序随机显示6种类型中的一种,但有些问题应该更频繁地出现。我使用加权数组,但在从加权数组中选择问题类型后,如果在if语句中不使用10个或更多的“或”命令,我就很难确定它是哪种问题类型。以下是一个简化版本:

//shuffle array of 10 integers to get a random value
var rand_10 = [0,1,2,3,4,5,6,7,8,9];
fisherYates(rand_10);

//Set weightedProb
weightedProb[0] = probType[0];
weightedProb[1] = probType[0];
weightedProb[2] = probType[0];
.
.
.
weightedProb[8] = probType[0];
weightedProb[9] = probType[1];

theProblem = weightedProb[rand_10[0]];
if(rand_10[0] == 0 || rand_10[0] == 1 || rand_10[0] == 2 || rand_10[0] == 3 ||rand_10[0] == 4||rand_10[0] == 5||rand_10[0] == 6||rand_10[0] == 7||rand_10[0] == 8){
  //do something
}else if(rand_10[0] ==9){
  //do something else
}

为什么不;你不想这样写吗

if(rand_10[0] >= 0 && rand_10[0] <= 8){
  //do something
}else if(rand_10[0] ==9){
  //do something else
}

如果(rand_10[0]>=0&&rand_10[0]您可以这样做(注意,某些IE版本不支持indexOf):


这是假设值并不总是一个范围,您需要精确的控制。

将进行简单的范围比较(
=0&&rand_10[0]
arr=[1,2,3,4,5,6,7,8]

if (rand_10[0] in arr) {
//...
}

您还可以使用switch语句:

 switch(rand_10[0]) {
   case 0:
   case 1:
   case 2:
   case 3:
   case 4:
   case 5:
   case 6:
   case 7:
   case 8:
     // do something
     break;
   case 9:
     // do something
     break;
 }

最好使用生成加权随机指数的函数,如下所示:

function weightedRandomIndex(weights) {
    var sum = 0, i, x, n=weights.length, rnd;
    for (i=0; i<n; i++) {
        sum += weights[i];
    }
    rnd = Math.floor(Math.random()*sum);
    for (i=0, x=0; i<n; i++) {
        x += weights[i];
        if (x > rnd) return i;
    }
}

下面是一个javascript Fisher-Yates Shuffle
if(rand_10[0]>=0&&rand_10[0]<9){}else{}
如果切换if,它会变得更容易:
if(rand_10[0]==9){/*做点别的*/}别的{/*做点别的*/}
谢谢!我从未接受过正式培训,所以我的知识有差距,但这很简单,也很有用!是的,谢谢!正如我在下面所写的,我从未接受过正式培训,所以我的知识有一些差距。感谢您填写这篇文章,这篇文章非常简单和有用!@user877011如果您正在学习Javascript的良好教程,请尝试当你觉得舒服的时候,读一下。我也推荐(代码学院)[www.codeaccademy.com]。谢谢你的评论。我实际上使用了一个函数来创建随机加权索引,但我认为它更难阅读,而且它与我所问的问题没有直接关系,所以我只是写了一个列表,而不是将函数放在我的问题中。不过,谢谢!
 switch(rand_10[0]) {
   case 0:
   case 1:
   case 2:
   case 3:
   case 4:
   case 5:
   case 6:
   case 7:
   case 8:
     // do something
     break;
   case 9:
     // do something
     break;
 }
function weightedRandomIndex(weights) {
    var sum = 0, i, x, n=weights.length, rnd;
    for (i=0; i<n; i++) {
        sum += weights[i];
    }
    rnd = Math.floor(Math.random()*sum);
    for (i=0, x=0; i<n; i++) {
        x += weights[i];
        if (x > rnd) return i;
    }
}
var idx = weightedRandomIndex([9,1]);  // 9 to 1 chance for index 0 over index 1