jQuery随机计数,没有数字重复,直到循环结束

时间:2013-06-02 22:28:48

标签: jquery arrays math random counter

我一直在努力。 jQuery计数器函数,从06连续随机计数但不重复数字直到循环结束,即直到数组中第7位的计数。目前以下代码适用于我,但数字重复。请帮忙!

function beginTimer() {
    if ($('#timer').html().length == 0) {
        timer(0) ;  
    }
}

function timer(i) {
    setTimeout("timer(" + (i) + ")", 1000);
    $('#timer').html(Math.floor(Math.random() * 6));
}

3 个答案:

答案 0 :(得分:1)

你需要创建一个7位数的数组,按shuffling the deck随机化数组(使用sort,尽管fearless leader says),输出它们,然后开始再次。如果不维护已经输出的数字列表,就无法避免重复。

JS Fiddle

var digits = [0, 1, 2, 3, 4, 5, 6];
digits.shuffle = function () {
    var i = this.length,
        j, temp;
    while (--i >= 0) {
        j = Math.floor(Math.random() * (i + 1));
        temp = this[i];
        this[i] = this[j];
        this[j] = temp;
    }
    this.lastOutput = -1;
};
digits.shuffle();

var output = function () {
    var i = ++digits.lastOutput;
    if (i >= digits.length) {
        digits.shuffle();
        i = 0;
    }

    $('#timer').html(digits[i]);
    this.lastOutput = i;
    setTimeout(output, 1000);
};

output();

答案 1 :(得分:0)

您可以创建一个“数字”数组并从中挑选,直到它们不再存在。

var digits = [];

// populate our digits array with 0-6
for(var i = 0; i < 6; i++)
    digits.push(i);

function timer() {
    // are there still digits remaining?
    if(!digits.length)
        return;

    // select a random digit and remove it from the array
    var digit = digits.splice( Math.floor( Math.random() * digits.length ), 1 );

    $('#timer').html(digit);

    setTimeout(timer, 1000);
}

<强> JSFiddle

答案 2 :(得分:0)

var counted = [];

function count() {
    var numb, go = true;

    while (go) {
        numb = Math.floor(Math.random() * 6);
        if (counted.indexOf(numb) == -1) counted.push(numb), go = false;
    }

    $('#timer').html(numb);
    if (counted.length > 5) counted = [];
    setTimeout(count, 300);
}

FIDDLE