我在这里看到了这个问题answered,但我还有一个相关的问题。
同样的事情,但是,如果输出是一个多于1个数字的选择,如果你只想要返回一个值,上面的工作正常。
如何在这种情况下将(x)输出量#7返回到新的var或数组......?关于最佳实践的一些指导也将受到赞赏;)
只为了好玩, 目的:
创建一个小小的weenie web应用程序,它将[1 - 49]范围内的7个变量数字返回到数组中。 ` 想一想返回乐透号码列表 使用_underscore.js [Sample function]
从选择中创建新数组****我知道这更容易,但我试图获得理解 使用Vanilla JS来实现这个目标
_。样本([1,2,3,4,5,6],3); => [1,6,2]
var getLoot = Array.from(Array(50).keys()) // Create array of 49 numbers.
console.info(getLoot);
var pick = getLoot[Math.floor(Math.random() * getLoot.length)];
pick;
// pick返回一个单独的,如果你想要一个,但是,.. //我想要这样的东西:
var pick = function() {
// code that will return 7 numbers from the array into a new Array
// will randomize every time pick is called...
}
答案 0 :(得分:2)
如果您想要返回超过1个值,则可以将结果存储到an array等数据结构中。这是问题的解决方案
假设您可以将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);
Javascript的Math.random()
将返回0到1之间的值(不包括)。因此,要将索引缩放到正确的值以查看数组,您可能希望将其乘以公式(max - min) + min
答案 1 :(得分:0)
这可能是你想要的。
$(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;
}
答案 2 :(得分:0)
您可以使用Array.prototype.splice()
,Math.floor()
,Math.random()
,for
循环从输入数组中删除元素,从输入数组返回包含伪随机拾取索引的数组,而不重复索引被选中。
function rand(n) {
var res = []; var a = Array.from(Array(n).keys());
for (;a.length;res.push(a.splice(Math.floor(Math.random()*a.length),1)[0]));
return res
}
console.log(rand(50));
答案 3 :(得分:0)
完成这项工作的一个好方法是改组数组并选择第一个n
值。如;
function shuffle(a){
var i = a.length,
j,
tmp;
while (i > 1) {
j = Math.floor(Math.random()*i--);
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
return a;
};
var arr = Array(50).fill().map((_,i) => i+1); //[1,2,3...49,50]
randoms = shuffle(arr).slice(0,7) // to get 7 random numbers from arrary arr
console.log(randoms)
&#13;