好的,我已经花了将近两天的时间来解决这个问题而且我放弃了。
我想要做的是创建一个0-17之间的随机数组,其中每个数字将重复一次 - 所以总共有36个数字。
我写了一个函数来检查一个数字出现的次数,如果它发生了两次,那么它返回false。
直到我得到一个未定义的数字,然后它就会中断......
以下是我所拥有的:
name 'SAMPLE2
'
我很确定我的myRand()函数中出现了问题
有什么想法吗?
由于
答案 0 :(得分:2)
您缺少回报
return makeRand()
它没有返回,所以返回undefined
<强>更新强>
你的代码中又出现了一个错误。 0是假的,所以当rand为0时if (rand)
返回false,因此0永远不会插入=&gt;无限循环
makeRand这样:
function makeRand() {
var rand = checkNumberRepeat(Math.floor(Math.random()*18),numbers,2);
if (rand !== false){
return rand;
} else {
return makeRand();
}
}
已更新 jsfiddle:http://jsfiddle.net/nayish/c9sk9suc/4/
答案 1 :(得分:1)
我会采取不同的方法。
创建一个[0,0,1,1,2,2,...17,17]
:
var numbers = [];
for(var i = 0 ; i <= 17 ; i++) {
numbers.push(i);
numbers.push(i);
}
遍历数组,使用随机元素交换当前元素:
for(var i = 0 ; i < numbers.length ; i++) {
var rnd= Math.floor(Math.random()*numbers.length),
tmp= numbers[rnd];
numbers[rnd]= numbers[i];
numbers[i]= tmp;
}
<小时/>
这很容易变成一个函数:
function randomize(start, stop, count) {
var numbers = [];
for(var i = start ; i <= stop ; i++) {
for(var j = 0 ; j < count ; j++) {
numbers.push(i);
}
}
for(var i = 0 ; i < numbers.length ; i++) {
var rnd= Math.floor(Math.random()*numbers.length),
tmp= numbers[rnd];
numbers[rnd]= numbers[i];
numbers[i]= tmp;
}
return numbers;
} //randomize
对于您的示例,您可以这样称呼它:
numbers = randomize(0, 17, 2);