Maikeximu
Maikeximu

Reputation: 318

Non repeating array number (which is added twice or more with Jquery

I know the question about obtaining a random number with javascript (non repeating) is often asked but in my case I append the same jquery code twice or three time and I would like to obtain different information each time.

First i have a large array (150 items) which is built this way :

var arr = [
{
    "Numéro": "1",
    "Chinois": "爱",
    "Pinyin": "ài",
    "Français": "aimer, affection, apprécier",
    "Classificateurs": ""
},

Then I found on another post this random function :

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

Then I append the array information (I tried randomly - It's a flashcard kind of page so on click, the next "index" should be randomized and unique) on the page :

    $('#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;
});

So basically on page load or (if the next arrow is clicked) I would like the "index = randomnumber" to be ran once again but it seems stuck (because the random number seems allocated once and for all).

Finally you can see that, on my different divs, I'm using a not so random function to get a different index number. I often encounter a problem which is that the "good answer" (reponse1) is the same as in one of the "wrong answer" (reponse2,3 or 4).

I hope I explained myself clearly - I'm beginning in Javascript/Jquery. Thank you in advance.

Edit : I added a fiddle to show you the problem (just click on the body to move to next item - which is stuck after one click here)

http://jsfiddle.net/Hv8SD/

Upvotes: 0

Views: 465

Answers (1)

Ilya
Ilya

Reputation: 29693

You array-shuffling algorithm is fully incorrect.
A can propose this variant:
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 DEMO

Upvotes: 1

Related Questions