2017-08-17 2 views
1

J'écris quelques fonctions javascript pour aider à sélectionner aléatoirement des articles d'un flux JSON.Javascript - fonction retournant des résultats inattendus

J'ai créé une fonction appelée getRandomNumberFromRange qui prend 2 paramètres: les nombres minimum et maximum d'une plage de nombres à sélectionner. Le nombre d'articles à sélectionner au hasard est fourni via un attribut de données sur l'élément DOM qui sera éventuellement rempli avec les articles.

La deuxième fonction loadStories parcourt la quantité d'articles à extraire et appelle la fonction getRandomNumberFromRange pour obtenir un nombre. Ce numéro sera éventuellement utilisé comme clé pour sélectionner les articles du tableau de flux JSON.

Pour m'assurer qu'un nombre aléatoire n'est pas choisi plus d'une fois, j'ai créé un tableau pour stocker les nombres précédemment choisis, que je vérifierai quand le nombre est choisi. Si le nombre est déjà dans le tableau, un autre nombre est choisi, sinon il est ajouté au tableau. Ce numéro Codepen montre ce que j'ai jusqu'à maintenant. Le code est également illustré ci-dessous:

var setupEmployeeStories = function() { 
    var 
    $element = $(".related-employee-stories"), 
    noOfStories = parseInt($element.attr("data-stories")), 
    arrSelectedNumbers = [], 

    getRandomNumberFromRange = function(min, max) { 

     var randomNumber = Math.floor(Math.random() * (max - min) + min); 

     if(arrSelectedNumbers.indexOf(randomNumber) === -1){ 
      arrSelectedNumbers.push(randomNumber); 
     }else{ 
      getRandomNumberFromRange(min, max); 
     } 

     return randomNumber; 
    }, 

    loadStories = function(){ 
     for(var i = 0; i < noOfStories; i++){ 
      var rand = getRandomNumberFromRange(0, 4); 
      console.log(rand); 
     } 

     console.log(arrSelectedNumbers); 
    }; 

    loadStories(); 

}; 

setupEmployeeStories(); 

Malheureusement, je suis d'obtenir des résultats étranges des fonctions lorsque les fonctions sélectionnent les mêmes nombres aléatoires à plusieurs reprises. Pour une raison quelconque, getRandomNumberFromRange a tendance à retourner un nombre complètement différent de ce qui a été réellement choisi par la fonction. Cela peut être vu par les différences dans les résultats et enregistré le tableau final (console) - arrSelectedNumbers

Répondre

2
getRandomNumberFromRange = function(min, max) { 

    var randomNumber = Math.floor(Math.random() * (max - min) + min); 

    if(arrSelectedNumbers.indexOf(randomNumber) === -1){ 
     arrSelectedNumbers.push(randomNumber); 
    }else{ 
     randomNumber = getRandomNumberFromRange(min, max); 
    } 

    return randomNumber; 
} 

Vous devez définir getRandomNumberFromRange-randomNumber pour obtenir le résultat de la fonction récursive.

var setupEmployeeStories = function() { 
 
    var 
 
    $element = $(".related-employee-stories"), 
 
    noOfStories = parseInt($element.attr("data-stories")), 
 
    arrSelectedNumbers = [], 
 

 
    getRandomNumberFromRange = function(min, max) { 
 

 
     var randomNumber = Math.floor(Math.random() * (max - min) + min); 
 

 
     if(arrSelectedNumbers.indexOf(randomNumber) === -1){ 
 
      arrSelectedNumbers.push(randomNumber); 
 
     }else{ 
 
      randomNumber = getRandomNumberFromRange(min, max); 
 
     } 
 

 
     return randomNumber; 
 
    }, 
 

 
    loadStories = function(){ 
 
     for(var i = 0; i < noOfStories; i++){ 
 
      var rand = getRandomNumberFromRange(0, 4); 
 
      //console.log(rand); 
 
     } 
 

 
     console.log(arrSelectedNumbers); 
 
    }; 
 

 
    loadStories(); 
 

 
}; 
 

 
setupEmployeeStories();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="related-employee-stories" data-stories="3"></div>

+0

D'oh! Une telle erreur d'écolier. Merci beaucoup! –