显示随机,但不重复,直到结束不工作

时间:2014-05-14 23:32:10

标签: javascript jquery

我想要随机显示这些消息,但没有重复,直到它们全部通过。为什么有些消息被跳过或者我得到'未定义'?

var ranNums = [],
    container = $('#container'),
    messages = [
    'message 1',
    'message 2',
    'message 3',
    'message 4'
  ],
  totalMessages = messages.length;

function waitForNext() {
setTimeout(function(){
  changeMsg();
}, 1000);
}

function getNewRanNum() {
var num = Math.floor(Math.random() * totalMessages);

  if(ranNums.indexOf(num) > -1) {
  getNewRanNum();
  return;
} else {
  ranNums.push(num);
  console.log(num, ranNums);
  return num;
}
}

function changeMsg() {
var newMsg = getNewRanNum();

container.append(messages[newMsg] + '<br>');

if (ranNums.length === totalMessages) {
  console.log('end');
  return false;
}

waitForNext();
}

changeMsg();

2 个答案:

答案 0 :(得分:3)

getNewRanNum在某些条件下的return: num功能将undefined,在其他情况下将返回return;(使用num声明)。如果您的目标是递归调用,则需要返回最终递归调用的function getNewRanNum() { var num = Math.floor(Math.random() * totalMessages); if(ranNums.indexOf(num) > -1) { return getNewRanNum(); } else { ranNums.push(num); console.log(num, ranNums); return num; } } 。像这样的东西

{{1}}

答案 1 :(得分:0)

这是你的问题:

if(ranNums.indexOf(num) > -1) {
  getNewRanNum();
  return;
}

您正在获取一个新的随机数,但您并未将其返回。相反,尝试:

if(ranNums.indexOf(num) > -1) {
  return getNewRanNum();
}

查看此jsfiddle