You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免JavaScript随机选取JSON题目时连续重复?

避免连续选中相同题目的实现方案

要解决连续2-3次选中相同题目的问题,核心思路是维护最近选中的题目索引记录,生成新索引时排除这些历史记录中的值。以下是具体实现:

实现步骤

  1. 定义变量保存最近选中的索引(长度根据需要限制,比如保存最近2个,避免连续3次重复)
  2. 编写随机索引生成函数,循环生成直到找到不在历史记录中的有效索引
  3. 更新历史记录,保持其长度不超过设定的限制

代码示例

const fs = require('fs');
// 读取并解析题目JSON
const quizData = JSON.parse(fs.readFileSync('quiz.json'));
// 题目总数
const TOTAL_QUIZ_COUNT = 22;
// 保存最近选中的索引,最多保留2个(防止连续3次重复)
let recentQuizIndices = [];
// 历史记录最大长度,设为2则避免连续2-3次重复;设为1则仅避免连续2次重复
const MAX_HISTORY_LENGTH = 2;

// 生成符合要求的随机题目索引
function generateValidQuizIndex() {
  let newIndex;
  // 循环生成随机数,直到找到不在最近历史中的索引
  do {
    newIndex = Math.floor(Math.random() * TOTAL_QUIZ_COUNT);
  } while (recentQuizIndices.includes(newIndex));

  // 更新历史记录:添加新索引,超出长度则移除最早的记录
  recentQuizIndices.push(newIndex);
  if (recentQuizIndices.length > MAX_HISTORY_LENGTH) {
    recentQuizIndices.shift();
  }

  return newIndex;
}

// 使用示例
const selectedQuizIndex = generateValidQuizIndex();
const selectedQuiz = quizData[selectedQuizIndex];

说明

  • 如果只需要避免连续2次选中同一题目,将MAX_HISTORY_LENGTH改为1即可,此时仅保存上一次的索引,新索引只需与上一次不同。
  • 由于题目总数(22)远大于历史记录长度(最多2),循环一定会找到有效索引,不会出现死循环。
  • 该方案仅限制连续重复,不限制非连续的重复选中,符合题目随机选取的需求。

内容的提问来源于stack exchange,提问作者Camilo Tobon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 05:22:38