当前位置:首页 > VUE

用vue实现随机分组

2026-02-21 18:27:14VUE

使用 Vue 实现随机分组

数据准备

定义一个数组存储待分组的人员名单,并在 Vue 的 data 中初始化分组结果数组。

用vue实现随机分组

data() {
  return {
    people: ['张三', '李四', '王五', '赵六', '钱七', '孙八'],
    groups: []
  }
}

随机分组函数

通过 Fisher-Yates 洗牌算法对数组进行随机排序,再按指定组数分割。

用vue实现随机分组

methods: {
  shuffleArray(array) {
    const shuffled = [...array]
    for (let i = shuffled.length - 1; i > 0; i--) {
      const j = Math.floor(Math.random() * (i + 1))
      ;[shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]]
    }
    return shuffled
  },

  randomGroup(groupCount) {
    const shuffled = this.shuffleArray(this.people)
    this.groups = Array.from({ length: groupCount }, (_, i) => 
      shuffled.filter((_, index) => index % groupCount === i)
    )
  }
}

模板部分

添加分组按钮和结果显示区域,支持动态设置组数。

<template>
  <div>
    <input v-model.number="groupCount" type="number" min="1" :max="people.length" />
    <button @click="randomGroup(groupCount)">随机分组</button>

    <div v-for="(group, index) in groups" :key="index">
      <h3>第 {{ index + 1 }} 组</h3>
      <ul>
        <li v-for="person in group" :key="person">{{ person }}</li>
      </ul>
    </div>
  </div>
</template>

完整组件代码

整合所有部分形成完整组件,添加组数输入校验。

export default {
  data() {
    return {
      people: ['张三', '李四', '王五', '赵六', '钱七', '孙八'],
      groups: [],
      groupCount: 2
    }
  },
  methods: {
    shuffleArray(array) {
      const shuffled = [...array]
      for (let i = shuffled.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1))
        ;[shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]]
      }
      return shuffled
    },

    randomGroup(count) {
      const validCount = Math.min(Math.max(1, count), this.people.length)
      const shuffled = this.shuffleArray(this.people)
      this.groups = Array.from({ length: validCount }, (_, i) => 
        shuffled.filter((_, index) => index % validCount === i)
      )
    }
  }
}

功能扩展建议

  1. 添加人员管理功能,支持动态增删成员
  2. 实现不均衡分组(每组人数可配置)
  3. 增加分组结果保存功能
  4. 添加分组规则限制(如特定人员不能同组)

标签: vue
分享给朋友:

相关文章

vue实现画图

vue实现画图

Vue 实现画图功能 在 Vue 中实现画图功能通常需要结合 HTML5 的 <canvas> 元素或第三方库。以下是几种常见的方法: 使用原生 Canvas API 通过 Vue 直接…

vue实现pie

vue实现pie

Vue 实现饼图 在 Vue 中实现饼图通常可以通过第三方图表库(如 ECharts、Chart.js 或 Highcharts)来完成。以下是使用 ECharts 和 Chart.js 的两种常见方…

vue实现selectable

vue实现selectable

Vue 实现可选择的 Select 组件 在 Vue 中实现一个可选择的 Select 组件,可以通过以下几种方式: 使用原生 HTML select 元素 <template>…

利用vue 实现

利用vue 实现

以下是利用 Vue 实现常见功能的几种方法,分为不同场景和技术要点: 数据绑定与响应式更新 Vue 的核心特性是数据绑定,通过 v-model 实现双向绑定: <template>…

vue实现框选

vue实现框选

Vue 实现框选功能 在 Vue 中实现框选功能通常需要监听鼠标事件,计算选区范围,并根据选区范围高亮或选中元素。以下是实现框选功能的关键步骤。 监听鼠标事件 在 Vue 模板中,为容器元素绑定鼠标…

vue实现录音

vue实现录音

Vue 实现录音功能 在 Vue 中实现录音功能可以通过浏览器提供的 MediaRecorder API 完成。以下是具体实现方法: 引入依赖 确保项目支持现代浏览器 API,无需额外安装库。若需兼…