我正在创建一个包含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
}
答案 0 :(得分:5)
您所追求的是简单范围比较(>
和<
)吗?
e.g。
if(rand_10[0] >= 0 && rand_10[0] <= 8){
//do something
}else if(rand_10[0] == 9){
//do something else
}
答案 1 :(得分:3)
你可以这样做(注意某些IE版本不支持indexOf):
if ([0,1,2,3,4,5,6,7,8].indexOf(rand_10[0]) > -1) {
}
这假设值并不总是一个范围,您需要精细控制。
答案 2 :(得分:1)
为什么不这样写?
if(rand_10[0] >= 0 && rand_10[0] <= 8){
//do something
}else if(rand_10[0] ==9){
//do something else
}
答案 3 :(得分:1)
arr = [ 1, 2, 3, 4, 5, 6, 7, 8]
if (rand_10[0] in arr) {
//...
}
答案 4 :(得分:1)
您也可以使用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;
}
答案 5 :(得分:0)
最好使用生成加权随机索引的函数,如下所示:
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