0

我知道经常被问到有关使用 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;
}

然后我在页面上附加数组信息(我随机尝试 - 这是一种抽认卡类型的页面,因此单击,下一个“索引”应该是随机且唯一的):

    $('#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 开始。先感谢您。

编辑:我添加了一个小提琴来向您展示问题(只需单击主体以移至下一个项目 - 单击此处后卡住)

http://jsfiddle.net/Hv8SD/

4

1 回答 1

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

JSFiddle 演示

于 2013-09-15T15:42:04.610 回答