Javascript 从数组到新数组的随机选择

Javascript 从数组到新数组的随机选择,javascript,arrays,math,Javascript,Arrays,Math,我在这里看到了这个问题,但我还有一个相关的问题 我正在努力实现: 同样的道理,但是,如果输出是一个多于1个数字的选择,那么如果您只希望返回一个值,上面的方法就可以了 在这种情况下,如何将(x)个输出量#7返回到新的变量或数组中。。。?对于最佳实践的一些指导也将不胜感激;) 非常感谢…… 只是为了好玩, 目标: 创建一个小小的web应用程序,将[1-49]范围内的7个变量数字返回到一个数组中。 ` 想返回一个乐透号码列表吗 使用_underline.js[示例函数]从所选内容创建新数组 ****

我在这里看到了这个问题,但我还有一个相关的问题

我正在努力实现: 同样的道理,但是,如果输出是一个多于1个数字的选择,那么如果您只希望返回一个值,上面的方法就可以了

在这种情况下,如何将(x)个输出量#7返回到新的变量或数组中。。。?对于最佳实践的一些指导也将不胜感激;)

非常感谢……
只是为了好玩, 目标:

创建一个小小的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;ivar 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@httpNick
pick
返回数组,其中每个值都是
未定义的
。是否应
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;
}