我知道有关使用javascript(非重复)获取随机数的问题经常被问到,但在我的情况下,我会添加相同的jquery代码两次或三次,我希望每次都能获得不同的信息。
首先我有一个大阵列(150个项目),这是以这种方式构建的:
var arr = [
{
"Numéro": "1",
"Chinois": "爱",
"Pinyin": "ài",
"Français": "aimer, affection, apprécier",
"Classificateurs": ""
},
然后我在另一篇文章中找到了这个随机函数:
while(arr.length < 150){
var randomnumber=Math.ceil(Math.random()*147)
var found=false;
for(var i=0;i<arr.length;i++){
if(arr[i]==randomnumber){found=true;break}
}
if(!found)arr[arr.length]=randomnumber;
}
然后我附加了数组信息(我随机试了 - 这是一个flashcard类的页面,所以点击,下一个“索引”应该是随机的和唯一的)在页面上:
$('#qcm-az, .suivantQcm1').on ('click', function(qcmaz){
$('#reponse1').html(arr[index].Français);
$('#reponse2').html(arr[147 -Math.floor((Math.random() * 23)+1)].Français);
$('#reponse3').html(arr[99 - Math.floor((Math.random() * 65)+1)].Français);
$('#reponse4').html(arr[43 - Math.floor((Math.random() * 21)+1)].Français);
index = randomnumber;
});
所以基本上在页面加载或(如果点击下一个箭头)我希望再次运行“index = randomnumber”但它似乎卡住了(因为随机数似乎分配了一次)。
最后你可以看到,在我不同的div上,我使用一个不那么随机的函数来获得不同的索引号。我经常遇到一个问题,那就是“好答案”(reponse1)和“错误答案”(reponse2,3或4)中的答案相同。
我希望我能清楚地解释自己 - 我是从Javascript / Jquery开始的。提前谢谢。
编辑:我添加了一个小提示器来向您显示问题(只需点击正文即可转到下一个项目 - 点击此处后会卡住)
答案 0 :(得分:1)
您的数组重排算法完全不正确
A可以提出这种变体:
var counter = 0,newArray = [];
while(counter < 147)
{
var randomnumber=Math.ceil(Math.random()*147 - 1)
if(!newArray[randomnumber]) // if newArray doesn't contains index `randomnumber`
{
newArray[randomnumber]=arr[counter];
counter++;
};
};