js随机取数问题

一个30个数的数组,每次随机取6位,第一次必须的数一定有0,1,2; 总共取5次,全部取完,也是为了让每个数字都取到。5次之后又重新开始取数。
这个怎么实现呢??
用JavaScript实现。

阅读 2.3k
3 个回答

这是我的一点儿小想法,直接复制粘贴运行便可看到效果,至于获取之后再次重新获取,把生成数组的那个循环放在一个函数里面重复调用即可:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
</body>
<script>
    var originArr = []; //源数组
    for (var i = 3; i < 30; i++) { //生成3-29的数组  因为0,1,2要放在第一个数组里面,所以我这儿就这么做的
        originArr.push(i);
    }
    var result = []; //结果数组
    for (var j = 0; j < 5; j++) {
        result.push(buffArr(j));
    }
    console.log(result);

    function buffArr(count) {
        //这里默认没有管0,1,2的顺序,就放在前面,自己有想法可以再次上面进行更改!
        var buff_arr = count === 0 ? [0, 1, 2] : [];
        for (var i = buff_arr.length; i < 6; i++) {
            var randIndex = Math.floor(Math.random() * originArr.length);
            buff_arr.push(originArr.splice(randIndex, 1)[0]);
        }
        return buff_arr;
    }
</script>
</html>

希望我的回答对你有所帮助!

const dig = function* (n, size, head) {
  let arr = Array(head).fill(1).map((t,i) => i).concat(Array(n - head).fill(1).map((i,index) => index + head).sort(() => Math.random() - .5))
  while (arr.length) {
    yield arr.splice(0, 6).sort(() => Math.random() - .5)
  }
}

clipboard.png

思路
第一次有 0 1 2 那随机数就的从3 - 29 开始算 第一次获取3个随机数
然后至于0 1 2 排序什么的看你 给使用者错觉感,是随机数
然后6-29就可以依次随机获取 6个随机数

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题