gpt4 book ai didi

Javascript 每次都生成随机的唯一数字

转载 作者:行者123 更新时间:2023-12-02 05:38:47 28 4
gpt4 key购买 nike

好的,所以我需要在 1-10 之间创建四个随机生成的数字,并且它们不能相同。所以我的想法是将每个数字添加到一个数组中,但我如何检查该数字是否在数组中,如果是,则重新生成该数字,如果不将新数字添加到数组中?

所以基本上它会去,

1.创建新数字并添加到数组2.创建第二个新数字,检查它是否已经存在,如果不存在,添加到数组中。如果确实存在,请重新创建新号码,再次检查等...3.同上等等。

最佳答案

您想要所谓的“随机抓包”。假设你有一个数字“包”,每个数字在这个包中只出现一次。您可以根据需要随机取出数字。

这里介绍的其他一些解决方案的问题是它们随机生成号码,并检查它是否已被使用。这将需要越来越长的时间才能完成(理论上最多需要无限长的时间),因为您正在等待 random() 函数返回一个您还没有的值(而且它没有 这样做,它可以永远给你 1-9,但永远不会返回 10)。

有很多方法可以实现抓包式解决方案,每种方法的成本各不相同(不过,如果做得正确,永远不会是无限的)。

您的问题最基本的解决方案如下:

var grabBag = [1,2,3,4,5,6,7,8,9,10];

// randomize order of elements with a sort function that randomly returns -1/0/1
grabBag.sort(function(xx,yy){ return Math.floor(Math.random() * 3) - 1; })

function getNextRandom(){
return grabBag.shift();
};

var originalLength = grabBag.length;
for(var i = 0; i < originalLength; i++){
console.log(getNextRandom());
}

这当然是破坏了原来的grabBag数组。而且我不确定这种排序有多“真正随机”,但对于许多应用程序来说,它可能“足够好”。

一种略有不同的方法是将所有未使用的元素存储在一个数组中,随机选择一个索引,然后删除该索引处的元素。这里的成本是每次删除元素时创建/销毁数组的频率。

关于Javascript 每次都生成随机的唯一数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7045615/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com