簡體   English   中英

太多“或”語句(javascript)

[英]Too Many “or” statements (javascript)

我正在創建一個包含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
}

你可以這樣做(注意某些IE版本不支持indexOf):

if ([0,1,2,3,4,5,6,7,8].indexOf(rand_10[0]) > -1) {
}

這假設值並不總是一個范圍,您需要粒度控制。

為什么不這樣寫?

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

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;
    }
}

然后你只需要指定權重來選擇你的數組索引:

var idx = weightedRandomIndex([9,1]);  // 9 to 1 chance for index 0 over index 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM