var candidates = {
"1":"Barack Obama",
"2":"Mitt Romney",
"3":"Dennis Kucinich",
"4":"Quentin Tarantino",
"5":"Count Dracula"
};
function getRandomInt(min, max){
return Math.floor(Math.random() * (max - min + 1)) + min;
}
Object.size = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
function getRandomPresident(){
var num = getRandomInt(1, Object.size(candidates));
if (num!=5){
alert(num);
var key = num.toString();
var res = candidates[key];
return res;
} else {
getRandomPresident();
}
}
alert(getRandomPresident());
此代码有效,但有时在生成随机值后,它会输出“undefined”而不是名称 - http://jsbin.com/uriwal/edit#source为什么?
答案 0 :(得分:2)
再次尝试时(else
阻止),您不会返回新值。您应该通过以下方式传递返回值:
return getRandomPresident();
目前,您正在选择一个新项目,但由于该函数未返回该项目,因此返回值为undefined
。
答案 1 :(得分:0)
我猜getRandomInt()函数可以返回0,你的关联数组没有。只需在if子句中创建一个更严格的检查:
if (num >= 1 && num <= 5) {
// do stuff
}
编辑: 从头开始,你有getRandomInt(1,max)。无论如何,为什么甚至有一个递归函数?就这样做:
var num = 0;
while ((num = getRandomInt(1, ...)) > 5) {
num = getRandomInt(1, ...);
}
//返回资源 希望这有帮助
答案 2 :(得分:0)
将功能更改为:
function getRandomInt(min, max){
return Math.floor(Math.random() * (max - min)) + min;
}