分组方法一
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>随机分组</title>
</head>
<body>
</body>
</html>
<script>
// 存放所有人的姓名
let names = new Array();
// 模拟人名
for (let index = 0; index < 34; index++) {
if (index < 9) {
names[index] = `user0${index + 1}`;
} else {
names[index] = `user${index + 1}`;
}
}
// 存储相同数据类型的集合
// console.log(names);
// 每组人数
let personCount = 5;
// 确定分组数量 向上取整
let count = Math.ceil(names.length / personCount)
// console.log(count);
// 二维数组 存储分组信息
let groups = new Array();
// 方式一 两层循环
for (let index = 0; index < count; index++) {
// 一维数组 存储 每个组的组员名字
let group = new Array();
// 外层循环 按照组的数量循环 每循环一次分一个组
if (personCount < names.length) {
// 如果每组人数小于数组长度 那么我就随机分
for (let index = 0; index < personCount; index++) {
// 为该组随机分配组员 随机下标 注意 从原数组中随机的元素需要从原数组中删除 避免某员工被重新分配
// 0 ~ 1 不包含1 的浮点数
// 随机下标
let i = Math.floor(Math.random() * names.length);
// 从原数组中截取姓名
let name = names.splice(i,1)[0];
// 将随机姓名存储到小组数组中
group.push(name)
}
// 将每组的人员姓名 存储到二维数组中
groups.push(group);
} else {
if (names.length < groups.length) {
// 如果剩余人数 不大于 小组数量 将剩余人数平均或随机为每一个分组分配一名组员
// 未分组人数
let len = names.length;
for (let j = 0; j < len; j++) {
const element = names.splice(0,1)[0];
groups[j].push(element);
}
} else {
// 如果每组人数小于数组长度 并且 剩余人数 大于小组数量 那么我们将剩余人数单独分成一组
groups.push(names);
}
}
}
console.log(groups);
</script&