0

我不知道为什么这不起作用,应该返回一个具有四个不同值的数组,但它没有

$(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]);
        }
    }
});
4

3 回答 3

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);
}

使用随机播放方法的替代解决方案(在这篇文章中找到):

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(''))
于 2013-10-30T01:56:08.487 回答
1

如果您生成一个数字并将其放入数组中,您不认为这$.inArray()会告诉您吗?

您的while循环保证会挂起。当然,数组 ( randomNumbers[i]) 的成员总是会在数组中。事实上$.inArray(),当调用查看是否randomNumbers[i]在数组中时会返回i(如果它不在其他地方,在这种情况下它不可能)。你的循环不会超过第一个数字,所以它只是0.

于 2013-10-30T01:35:30.107 回答
0

我不明白你的while循环的意义。inArray仅在未找到该值时返回 -1,它将始终找到,因此您只是为自己创建一个无限循环,它将不断重置生成的随机数。

如果您只是想向 a 添加四个随机数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]);
    }
});
于 2013-10-30T01:47:30.293 回答