用JS随机抽取三人

因为实验室每周需要三人来做报告,所以用JS来做一个随机抽取的页面。

首先,先说一下需求。研二同学共5人,一人是单独的一组,研一同学共9人,同时九人分为三组。所以共八组,每周报告的三人从八组中抽取,这三人不能有两人或者两人以上在同一组。

程序思路1

1.将研一的三组建成三个小的数组,从这三个数组里每组随机抽取一人;
2. 将第一步里抽取出来的三人和研二的五人放在一起,组成一个新的数组,在从中随机抽取三人;
3. 若随机抽取的三人存在上述情况,则返回第一步,重新随机抽取,直到不存在第二步的情况,然后输出;

程序思路2

  1. 将实验室所有人放在一个大的数组里,先从数组里随机抽取三人;
  2. 将研一的三组建成三个小的数组,把随机抽取出来的三人去循环判断是否存在两人或者两人以上在同一组;

最后实现

本来以为思路一比较好做,做到后面发现判断是否同一组再重新进行函数运行,总是出现问题,选出来的三个人通过for循环去判断,理论可以但是却不能实现,还需要我再仔细想想。思路一程序如下

    for (var i=0;i<3;i++) {
       index1 = Math.round(Math.random()*(array.length-1));
       value = array[index1];

       newarray.push(value);
       array.splice(index1,1);

       value ='';
   }
   console.log(newarray);

   for (var j =0;j<newarray.length;j++) {
       for (var m = 0; m < arr1.length; m++) {
           if (newarray[j] === arr1[m]){
               num1++;
           }
       }
       for (var n = 0; n < arr2.length; n++) {
           if (newarray[j] === arr2[n]){
               num2++;
           }
       }
       for (var o = 0; o < arr3.length; o++) {
           if (newarray[j] === arr3[o]){
               num3++;
           }
       }
   }
    btn.onclick = function (){


    var id = setInterval(frame,500);
    function frame() {
        if (!flag) {
            clearInterval(id);
            flag=true;
        } else {
            Begin();
            document.getElementById("name").innerHTML="";
            for (var i = 0; i < newarray.length; i++) {
                document.getElementById("name").innerHTML += newarray[i] + "</br> ";

            }
            flag=false;
            newarray=[];
        }
    }

}

这里面还是存在一些问题,思路二可以正常实现,下面是思路二的程序:

function Begin() {
        num1 = Math.round(Math.random() * (arr4.length - 1));
        num2 = Math.round(Math.random() * (arr4.length - 1));
        num3 = Math.round(Math.random() * (arr4.length - 1));
        Begin2();
    }

    function Begin2() {
        var array = [];
        var arrayLast = [];
        if (num1 !== num2 && num1 !== num3 && num2 !== num3) {
            array.push(num1);
            array.push(num2);
            array.push(num3);
            for (var i = 0; i < array.length; i++) {
                if (typeof arr4[array[i]] === "string") {
                    arrayLast.push(arr4[array[i]]);
                } else {
                    var num4 = Math.round(Math.random() * (arr4[array[i]].length - 1));
                    arrayLast.push(arr4[array[i]][num4]);
                }
            }
        } else {
            Begin();
        }

        console.log(arrayLast);
        document.getElementById("name").innerHTML="";
        for (var i = 0; i < arrayLast.length; i++) {
            document.getElementById("name").innerHTML += arrayLast[i] + "</br> ";
        }
    }

    btn.onclick = function () {
        Begin();

    }

感谢师兄给了我帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值