Javascript 无重复随机计数

Javascript 无重复随机计数,javascript,jquery,html,random,Javascript,Jquery,Html,Random,我在寻找没有重复数字的随机计数 我发现了这样的东西,没有任何评论 var randnums = [0,1,2,3,4,5,6]; setInterval(function() { var m = Math.floor(Math.random()*randnums.length); $('ul li:nth-of-type('+(randnums[m])+')').animate({

我在寻找没有重复数字的随机计数 我发现了这样的东西,没有任何评论

        var randnums = [0,1,2,3,4,5,6];

        setInterval(function() {
            var m = Math.floor(Math.random()*randnums.length);
            $('ul li:nth-of-type('+(randnums[m])+')').animate({
                opacity:1
            },400)
            console.log(randnums[m])
        }, 300);
示例

我想要实现的目标:

  • 当你检查控制台日志时,你会发现random并不像我想象的那样工作。 我认为random应该工作,例如4,3,5,1,6,2,每个数字的间隔为300。 现在它的工作原理是每300毫秒选择一个数字1,2,2,4,5,0等等,所以4秒后你就看不到例子1了

  • 其次,我想创建一个计算元素的脚本。元素的长度(li)然后创建数组并选择不重复的随机数

我在网上寻找帮助很久了,但没有任何积极的结果。

测试这个:

var randnums = [0, 1, 2, 3, 4, 5, 6],
    delay = setInterval(function () {
        var m = Math.floor(Math.random() * randnums.length);
        console.log(randnums[m]);
        randnums.splice(m,1);
        if (!randnums.length) {
            clearInterval(delay);
        }
    }, 300);
splice()
是这个脚本中非常重要的一部分,它“丢弃”了一个使用过的数字。我还添加了一个检查,当使用所有数字时,它会停止间隔


编辑

您可以使用
for
循环创建长度为X的数组,例如:

var randnums = [], n, len = 12;
for (n = 0; n < len; n++) {
   randnums.push(n);
}
var randnums=[],n,len=12;
对于(n=0;n
拼接的替代方案,如果您希望能够重用阵列或循环动画,请尝试以下操作:

var randnums = [0,1,2,3,4,5,6];
randnums.sort(function(a,b) {return Math.random()-0.5;}); // "shuffle" the array
setInterval(function() {
    var n;
    randnums.push(n = randnums.shift()); // cycle the first element to the back
    // do something with n
},300);

A?我用过那个,但它不起作用,正如你在示例中看到的,看起来你在使用后忘记了拼接
randnums
数组…嗯,但是拼接在这个脚本中没有任何作用。或者我不太明白这一点。当我用拼接线时,它只显示阵列中的一个数字。所以请你帮个忙好吗?:)我更喜欢“先洗牌”的方法,但是这个洗牌功能非常糟糕,会产生非常不均匀的结果。你应该改用Fisher-Yates之类的东西。这就是为什么“shuffle”在引号中的原因:p它是随机的,但这就是你在一行代码中尝试shuffle得到的结果;)然后你应该向OP说清楚,他显然不知道这一点。不要只是给他不可靠的代码。好吧,OP需要“好”的随机性吗?特别是在JavaScript中,没有什么是值得信任的,我认为“足够好”的随机性确实足够好。也许他不需要它,也许他需要它。我的观点是,通过对他撒谎,你从他那里得到了这个决定,这使得这是一个糟糕的答案。而且,您知道如何改进代码,那么为什么不这样做呢?当然不会痛的,是吗?如果你想把坏代码放在里面,至少要提到它实际上不会给出一个均匀的分布。这确实是一个错误。但你能帮我做第二部分吗?当我有更多的元素,例如12个'li'时,当13个元素[0,1,2,…,11,13]时,我如何创建带有数字元素[0,1,2,…,11,12]的数组etc@SzymonDziewo我已经更新了我的答案。顺便说一句,“OP”是指原始海报,即你。也许我做错了什么,但当我更改var randnums时,它在console.log中显示undefined,并且我假设它应该返回[0,1,2,…,11,12]@szymondziewoski,这是我的错,我的代码中有一个拼写错误。我现在已经改正了。代码创建了长度为12的
[0,1,2,…,11]
。是的,现在我看到它正在工作。你救了我的同伙:)。我真的很感谢你在这个问题上花费的时间,非常感谢:)我欠你一个人情!:)