Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 随机唯一数的大小数组_Javascript_Arrays_Random_Unique_Lodash - Fatal编程技术网

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)