当前位置:首页 > VUE

用vue实现随机分组

2026-02-21 18:27:14VUE

使用 Vue 实现随机分组

数据准备

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

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

随机分组函数

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

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 实现视频会议 技术选型 Vue.js 作为前端框架,结合 WebRTC 技术实现实时音视频通信。常用的库包括: peerjs:简化 WebRTC 的点对点连接。 socket.io:用…

vue实现pie

vue实现pie

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

vue代理实现

vue代理实现

Vue 代理实现方法 在 Vue 项目中,配置代理可以解决开发环境下的跨域问题,通常通过修改 vue.config.js 文件实现。以下是几种常见的代理配置方式: 基础代理配置 在 vue.con…

vue实现树

vue实现树

Vue 实现树形结构的方法 使用递归组件实现树形结构 递归组件是Vue中实现树形结构的常见方式。通过组件调用自身,可以轻松构建多层嵌套的树形数据。 <template> <ul…

vue实现 单选

vue实现 单选

实现 Vue 单选功能 在 Vue 中实现单选功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 绑定单选按钮 通过 v-model 可以轻松实现单选功能,将单选按钮的值绑定到同…

vue实现分栏

vue实现分栏

Vue实现分栏的常见方法 使用CSS Flexbox布局 通过Flexbox可以快速实现分栏效果,适合大多数响应式布局场景 <template> <div class="con…