我正在编写几个javascript函数来帮助从JSON提要中随机选择文章。
我创建了一个名为getRandomNumberFromRange的函数,该函数有2个参数:可供选择的数字范围的最小和最大数量。随机选择的文章数量是通过DOM元素的数据属性提供的,最终将用文章填充。
第二个函数loadStories循环遍历需要检索的文章数量,并调用getRandomNumberFromRange函数来获取数字。此数字最终将用作从JSON提要数组中选择文章的键。
为了确保不会多次选择一个随机数,我创建了一个数组来存储以前选择的数字,我将在选择数字时对其进行检查。如果数字已经在数组中,则选择另一个数字,如果它没有被添加到数组中。
这Codepen显示了我到目前为止所拥有的内容。代码也如下所示:
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();
不幸的是,当函数多次选择相同的随机数时,我会从函数中得到一些奇怪的结果。由于某种原因,getRandomNumberFromRange倾向于返回与函数实际拾取的数字完全不同的数字。这可以通过(控制台)记录结果和最终数组(arrSelectedNumbers
)的不同来看出答案 0 :(得分: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;
}
您需要将getRandomNumberFromRange
设置为randomNumber
以获取递归函数的结果。
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();
&#13;
<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>
&#13;