在关联数组查找中未定义

时间:2012-03-03 16:49:51

标签: javascript

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为什么?

3 个答案:

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