Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.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 - Fatal编程技术网

Javascript 从数组创建随机数组

Javascript 从数组创建随机数组,javascript,Javascript,假设我有16个数字,范围从0到15。他们排成一列。我想要实现的是以下阵列: 包含3个随机数的数组 包含2个随机数的数组 包含3个随机数的数组 包含2个随机数的数组 包含2个随机数的数组 包含3个随机数的数组 我将称之为masterarray的数字只能使用一次。因此,数组x包含1,5和7,数组y包含2,9(这些应该是完全随机的) 我知道我可以使用indexOf和splice从数组中获取和删除项目。但是,我如何从数组中获取随机数,同时从列表中删除它们呢 在这个过程中,当数组被更改时,foreach将

假设我有16个数字,范围从0到15。他们排成一列。我想要实现的是以下阵列:

  • 包含3个随机数的数组
  • 包含2个随机数的数组
  • 包含3个随机数的数组
  • 包含2个随机数的数组
  • 包含2个随机数的数组
  • 包含3个随机数的数组
  • 我将称之为masterarray的数字只能使用一次。因此,数组x包含1,5和7,数组y包含2,9(这些应该是完全随机的)

    我知道我可以使用
    indexOf
    splice
    从数组中获取和删除项目。但是,我如何从数组中获取随机数,同时从列表中删除它们呢

    在这个过程中,当数组被更改时,foreach将不会运行。据我所知,for循环也是如此


    我怎样才能做到这一点呢?

    这里有一个非洗牌方法

    var master = [], arr1=[], arr2=[], arr3=[], arr4=[], arr5=[], arr6=[], i=1;
    
    for(i; i<16;i++){  // populating "master" array
    master.push(i); 
    }
    
    
    while(master.length>0){
    var num =master.splice(Math.floor(Math.random()*master.length),1)[0];
    if (master.length>11){
    arr1.push(num);
    continue;
    }
    if(master.length>9){
    arr2.push(num);
    continue;
    }
    if(master.length>6){
    arr3.push(num);
    continue;
    }
    if(master.length>4){
    arr4.push(num);
    continue;
    }
    if(master.length>2){
    arr5.push(num);
    continue;
    }
    else {
    arr6.push(num);
    }
    }
    console.log(arr1);
    console.log(arr2);
    console.log(arr3);
    console.log(arr4);
    console.log(arr5);
    console.log(arr6);
    
    var master=[]、arr1=[]、arr2=[]、arr3=[]、arr4=[]、arr5=[]、arr6=[]、i=1;
    对于(i;i0){
    var num=master.splice(Math.floor(Math.random()*master.length),1)[0];
    如果(主长度>11){
    arr1.推送(num);
    继续;
    }
    如果(主长度>9){
    arr2.推送(num);
    继续;
    }
    如果(主长度>6){
    arr3.推送(num);
    继续;
    }
    如果(主长度>4){
    arr4.推送(num);
    继续;
    }
    如果(主长度>2){
    arr5.推送(num);
    继续;
    }
    否则{
    arr6.推送(num);
    }
    }
    控制台日志(arr1);
    控制台日志(arr2);
    控制台日志(arr3);
    控制台日志(arr4);
    控制台日志(arr5);
    控制台日志(arr6);
    
    您需要洗牌原始数组,然后使用
    pop()
    填充新数组。谢谢你!我要试一试:)我没有想过要从一个洗牌的角度去做!