Javascript 从数组到新数组的随机选择
我在这里看到了这个问题,但我还有一个相关的问题 我正在努力实现: 同样的道理,但是,如果输出是一个多于1个数字的选择,那么如果您只希望返回一个值,上面的方法就可以了 在这种情况下,如何将(x)个输出量#7返回到新的变量或数组中。。。?对于最佳实践的一些指导也将不胜感激;) 非常感谢……Javascript 从数组到新数组的随机选择,javascript,arrays,math,Javascript,Arrays,Math,我在这里看到了这个问题,但我还有一个相关的问题 我正在努力实现: 同样的道理,但是,如果输出是一个多于1个数字的选择,那么如果您只希望返回一个值,上面的方法就可以了 在这种情况下,如何将(x)个输出量#7返回到新的变量或数组中。。。?对于最佳实践的一些指导也将不胜感激;) 非常感谢…… 只是为了好玩, 目标: 创建一个小小的web应用程序,将[1-49]范围内的7个变量数字返回到一个数组中。 ` 想返回一个乐透号码列表吗 使用_underline.js[示例函数]从所选内容创建新数组 ****
只是为了好玩, 目标: 创建一个小小的web应用程序,将[1-49]范围内的7个变量数字返回到一个数组中。 ` 想返回一个乐透号码列表吗 使用_underline.js[示例函数]从所选内容创建新数组 ****我知道这很容易,但我正在努力理解 使用Vanilla JS来实现这一点 _.样本([1,2,3,4,5,6],3);=>[1,6,2]
//pick返回一个单曲,如果您想要单曲,这是可以的,但是。。 //我想要这样的东西:
var pick = function() {
// code that will return 7 numbers from the array into a new Array
// will randomize every time pick is called...
}
如果您想返回不止一个值,您可以将结果存储到数据结构中,如。这是解决这个问题的办法 假设您可以将50个数字的数组传入
pick()
函数:
var getRandomArbitrary = function(min, max) {
return Math.floor(Math.random() * (max - min) + min);
}
var pick = function(fiftyNumberArray, numberOfValuesWanted) {
var randomNums = [];
for(var i = 0; i < numberOfValuesWanted; i++) {
randomNums.push(
fiftyNumberArray[getRandomArbitrary(0, 50)]
);
}
return randomNums;
};
var fiftyNumbers = [] // <- set your array of fifty numbers
pick(fiftyNumbers, 7);
var getrandomArbital=函数(最小值、最大值){
返回Math.floor(Math.random()*(max-min)+min);
}
变量选取=函数(fiftyNumberArray,numberOfValuesWanted){
var randomNums=[];
对于(var i=0;i var fiftyNumbers=[]/这可能是您想要的
$(function()
{
var lol = [1,4,5,6,7,8,9];
function getPart(array,number)
{
var part = [],
index;
while(true)
{
if(part.length == number)
{
break;
}
index = $.random(0,part.length);
part.push(lol.splice(index,1));
}
return part;
}
});
$.random = function(min,max,filter)
{
var i,
n = Math.floor(Math.random()*(max-min+1)+min);
if(filter != undefined && filter.constructor == Array)
{
for(i=filter.length-1;i>-1;i--)
{
if(n == filter[i])
{
n = Math.floor(Math.random()*(max-min+1)+min)
i = filter.length;
}
}
}
return n;
}
可以使用Array.prototype.splice()
函数rand(n){
var res=[];var a=Array.from(Array(n).keys());
对于(;a.length;res.push)(a.splice(数学地板(数学随机()*a.length),1)[0]);
返回res
}
控制台日志(兰特(50))
执行此操作的一个好方法是洗牌数组并拾取第一个n
值。例如,
函数洗牌(a){
var i=a.长度,
J
tmp;
而(i>1){
j=Math.floor(Math.random()*i--);
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
返回a;
};
var arr=Array(50).fill().map(((u,i)=>i+1)//[1,2,3...49,50]
randoms=shuffle(arr).slice(0,7)//从数组arr中获取7个随机数
console.log(randoms)
这听起来像是一个函数,它不会两次返回同一个元素。哦,我读了//会在每次调用pick时随机化…
如中所示,它会返回原始数组的随机子集,但不能确保它是不同的pick
将始终返回一组来自原始50的随机数字,我认为这解决了OP的评论。感谢@httpNick,这确实是我一直在寻找的,也感谢Ryan,…。看起来,这也是一个选项~我没想过。现在将尝试一些排列;)。。。。不管怎样,多谢了很多人都有我想要的东西up@httpNickpick
返回数组,其中每个值都是未定义的。是否应getrandomArbital
返回Math.floor(Math.random()*(max-min)+min)
?您是对的,谢谢@guest271314。更新了我的答案,有很多jQuery(?)与jQuery无关,还有一个非常奇怪的算法。我喜欢这个想法,给我的脑海带来了很多可能性‘谢谢@亨德里克是由扑克牌完成的真实工作的精确副本。:)感谢guest271314,我仍然需要更好地理解使用原型,以便能够以这种方式使用它,但感谢def将它保留在我的武库中
$(function()
{
var lol = [1,4,5,6,7,8,9];
function getPart(array,number)
{
var part = [],
index;
while(true)
{
if(part.length == number)
{
break;
}
index = $.random(0,part.length);
part.push(lol.splice(index,1));
}
return part;
}
});
$.random = function(min,max,filter)
{
var i,
n = Math.floor(Math.random()*(max-min+1)+min);
if(filter != undefined && filter.constructor == Array)
{
for(i=filter.length-1;i>-1;i--)
{
if(n == filter[i])
{
n = Math.floor(Math.random()*(max-min+1)+min)
i = filter.length;
}
}
}
return n;
}