我无法弄清楚为什么这不起作用,应该返回一个包含四个不同值的数组,但它不会
$(document).ready(function (e) {
var randomNumbers = new Array();
for (var i = 0; i < 4; i++) {
randomNumbers[i] = Math.floor((Math.random() * 9) + 1);
while ($.inArray(randomNumbers[i], randomNumbers) !== -1) {
randomNumbers[i] = Math.floor((Math.random() * 9) + 1);
}
}
for (var i = 0; i < randomNumbers.length; i++) {
if ($('#output').html() !== '') {
var existingOutput = $('#output').html();
$('#output').html(existingOutput + randomNumbers[i]);
} else {
$('#output').html(randomNumbers[i]);
}
}
});
答案 0 :(得分:2)
可以通过附加连接数组
来删除if
和第二个循环
$(document).ready(function (e) {
var randomNumbers = new Array();
for (var i = 0; i < 4; i++) {
var ran =newNum();
/* unique check*/
while ( $.inArray( ran, randomNumbers) >-1){
ran=newNum();
}
randomNumbers.push(ran)
}
$('#output').append( randomNumbers.join(''))
});
function newNum(){
return Math.floor((Math.random() * 9) + 1);
}
使用shuffle方法的替代解决方案(在此post中找到):
var a=[1,2,3,4,5,6,7,8,9];
function Shuffle(o) {
for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
};
$('#output').append( Shuffle(a).splice(0,4).join(''))
答案 1 :(得分:1)
如果你生成了一个数字并且将它放入数组,你认为$.inArray()
不会告诉你吗?
您的while
循环保证会挂起。当然,数组的成员(randomNumbers[i]
)总是在数组中。事实上$.inArray()
在调用时会看到randomNumbers[i]
是否在数组中将返回i
(如果它不在其他地方,在这种情况下它不可能)。你的循环不会越过第一个数字,所以它只是0
。
答案 2 :(得分:0)
我不明白你的while循环的意义。如果找不到值,inArray
仅返回-1,它将始终被找到,因此您只需为自己创建一个无限循环,以便重置生成的随机数。
如果您只想尝试将四个随机数添加到div
,这对我有用:
$(document).ready(function (e) {
var randomNumbers = new Array();
for (var i = 0; i < 4; i++) {
randomNumbers[i] = Math.floor((Math.random() * 9) + 1);
}
for (var i = 0; i < randomNumbers.length; i++) {
if ($('#output').html() !== '') {
var existingOutput = $('#output').html();
$('#output').html(existingOutput + randomNumbers[i]);
} else {
$('#output').html(randomNumbers[i]);
}
}
});
进一步重构:
$(document).ready(function (e) {
var randomNumbers = new Array();
for (var i = 0; i < 4; i++) {
randomNumbers[i] = Math.floor((Math.random() * 9) + 1);
}
for (var i = 0; i < randomNumbers.length; i++) {
$('#output').append(randomNumbers[i]);
}
});