[英]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.