我想要随机显示这些消息,但没有重复,直到它们全部通过。为什么有些消息被跳过或者我得到'未定义'?
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();
答案 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。