Javascript 随机唯一数的大小数组
我想知道获得一个特定大小、唯一随机数的数组最简洁的方法是什么 我得到这样的随机数:Javascript 随机唯一数的大小数组,javascript,arrays,random,unique,lodash,Javascript,Arrays,Random,Unique,Lodash,我想知道获得一个特定大小、唯一随机数的数组最简洁的方法是什么 我得到这样的随机数: times(4, () => random(30, 95)); 然而,这并不是唯一的。我可以使用uniq对其进行过滤,但我需要保证数组的长度为4。我想用洛达斯的方式。有什么想法吗?我知道这不是“洛达斯方式”,但它保证了唯一性,并允许您使用与以前相同的参数。它的伸缩性也比需要通过数组进行二进制或线性搜索的方法更好,因为平均是O(1),而不是O(log(n))或O(n) 函数uniqRandom(时间,…参
times(4, () => random(30, 95));
然而,这并不是唯一的。我可以使用uniq
对其进行过滤,但我需要保证数组的长度为4。我想用洛达斯的方式。有什么想法吗?我知道这不是“洛达斯方式”,但它保证了唯一性,并允许您使用与以前相同的参数。它的伸缩性也比需要通过数组进行二进制或线性搜索的方法更好,因为平均是O(1),而不是O(log(n))或O(n)
函数uniqRandom(时间,…参数){
常量集=新集()
而(次数>0){
常量rand=\随机(…参数)
如果(!set.has(rand)){
set.add(兰德)
时代--
}
}
返回数组.from(集合)
}
console.log(uniqRandom(4,30,33))代码>
我从函数编程的角度解决了它refillRandom
是一个递归函数,用于检查剩余的要生成的项目数,并再次调用自身,直到项目数达到所需的项目数为止
如果min
和max
随机数之间的距离大于所需的唯一项,则当无法生成序列时,它还会抛出错误。宁可犯错误,也不要永远等待
const生成器=(最小,偏移量)=>()=>
Math.floor(Math.random()*偏移量+最小值);
常量refillRandom=(列表、最小值、最大值、时间)=>{
常数偏移=最大-最小,
num=次数-list.length;
如果(时间>偏移){
抛出新错误(“无法生成错误”);
}
常量结果=q.uniq(q.times(num,generator(min,offset));
if(result.length
非常容易
const uniqRandomNumbers=u.sampleSize(u.range(30,95),4);
控制台日志(uniqRandomNumbers)代码>
如何设置javascript(获取唯一值),然后切片4@BryanDellinger。但是,如果删除唯一的数字,其数组大小将不会是4。我需要4个元素的保证。谢谢你,这是有效的,但我也想出了这样的东西。我一直在寻找lodash方法。除了\uuu.random()
允许通过设置为true
的第三个可选参数返回非整数值,在这种情况下,只要距离不是零,距离就无关紧要。虽然没有说,但我想他需要整数值。另外,我没有使用非常有趣的u.random()。是的,整数是我需要的。我把它升级为类似于循环解决方案。我只是觉得洛达斯有更平滑的东西。非常感谢您的分享!我不认为lodash有这样的东西,它太具体了。这需要一个有限的范围,因为range
创建了一个巨大的数组。所以我不能做范围(0,50000000)
。