我需要从数组中生成一个随机数但排除一个索引并返回随机数的索引 我试过这个:
function randNum(arr,excludeNum){
var randNumber = Math.floor(Math.random()*arr.length);
if(arr[randNumber]==excludeNum){
randNum(arr,excludeNum);
}else{
return randNumber;
}
}
alert(randNum([7, 10, 11],7));
但有时会返回我希望它返回的数字,有时会返回undefined 有什么问题?
答案 0 :(得分:4)
这是因为当生成的随机数是您要排除的随机数时,您的函数不会返回任何内容。在if子句中的return
函数调用中添加randNum
。
function randNum(arr,excludeNum){
var randNumber = Math.floor(Math.random()*arr.length);
if(arr[randNumber]==excludeNum){
return randNum(arr,excludeNum);
}else{
return randNumber;
}
}
alert(randNum([7, 10, 11],7));
答案 1 :(得分:1)
return
前面需要randNum(arr,excludeNum);
个关键字。
答案 2 :(得分:0)
因为你正在使用地板,最终堆叠将填满。 (我也认为你错过了回归)
为什么不从数组中删除该数字并在其余部分中选择随机索引?
答案 3 :(得分:0)
这是一个更新版本,它查找索引,删除不需要的索引,并从其他索引中随机选择。我用它来随机播放播放列表。
function randomIndex(arr, excludeIndex){
let indexes = Object.keys(arr); //get a list of indexes
indexes.splice(excludeIndex, 1); //remove the unwanted
return indexes[Math.floor(Math.random() * indexes.length)]; //pick a new index
}