当前位置:首页 > JavaScript

js实现选题

2026-02-28 19:29:58JavaScript

实现随机选题功能

在JavaScript中实现随机选题功能可以通过以下方式完成。假设有一个题目数组,需要从中随机选取若干题目。

定义题目数组

const questions = [
  "题目1: JavaScript的基本数据类型有哪些?",
  "题目2: 解释闭包的概念",
  "题目3: 什么是事件冒泡?",
  "题目4: 如何实现深拷贝?",
  "题目5: Promise有哪些状态?"
];

简单随机选择单个题目

js实现选题

function getRandomQuestion() {
  const randomIndex = Math.floor(Math.random() * questions.length);
  return questions[randomIndex];
}

实现不重复随机选择多个题目

如果需要选择多个不重复的题目,可以使用以下方法:

方法一:使用Set存储已选索引

js实现选题

function getRandomQuestions(count) {
  if (count > questions.length) {
    throw new Error("请求的题目数量超过题库总量");
  }

  const selectedIndices = new Set();
  const result = [];

  while (result.length < count) {
    const randomIndex = Math.floor(Math.random() * questions.length);
    if (!selectedIndices.has(randomIndex)) {
      selectedIndices.add(randomIndex);
      result.push(questions[randomIndex]);
    }
  }

  return result;
}

方法二:洗牌算法随机排序后截取

function getRandomQuestions(count) {
  // 创建副本避免修改原数组
  const shuffled = [...questions];

  // Fisher-Yates洗牌算法
  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.slice(0, count);
}

加权随机选题实现

如果题目有不同的权重(如难度系数),可以使用加权随机算法:

const weightedQuestions = [
  { text: "简单题", weight: 0.6 },
  { text: "中等题", weight: 0.3 },
  { text: "难题", weight: 0.1 }
];

function getWeightedRandomQuestion() {
  const totalWeight = weightedQuestions.reduce((sum, q) => sum + q.weight, 0);
  let random = Math.random() * totalWeight;

  for (const question of weightedQuestions) {
    if (random < question.weight) {
      return question.text;
    }
    random -= question.weight;
  }

  return weightedQuestions[0].text; // 默认返回第一个
}

前端界面实现示例

结合HTML实现简单的随机选题界面:

<div id="question-container"></div>
<button id="random-btn">随机选题</button>

<script>
  document.getElementById('random-btn').addEventListener('click', function() {
    const randomQuestion = getRandomQuestion();
    document.getElementById('question-container').textContent = randomQuestion;
  });
</script>

注意事项

  • 题库较大时,洗牌算法可能影响性能,应考虑使用Set方法
  • 需要处理请求数量超过题库总量的边界情况
  • 实际应用中可能需要从服务器获取题目数据
  • 加权随机算法需要确保权重总和为1或做归一化处理

标签: js
分享给朋友:

相关文章

js实现验证码

js实现验证码

实现验证码的JavaScript方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const cha…

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 // 获取所有…