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

如何在JavaScript数组中随机获取JSON对象?图片测验题目随机化

实现图片测验应用的题目随机顺序展示方案

嗨,看起来你已经把图片测验的核心功能跑通了,要实现题目随机展示其实不难,核心就是把存储题目的questionBank数组打乱就行,这里给你具体的实现方案:

1. 添加数组洗牌函数

推荐使用Fisher-Yates洗牌算法,这是业界公认的均匀打乱数组的方法,比直接用sort(() => Math.random() - 0.5)的随机方式更公平,不会出现排序偏差。在你的controller.js代码里添加这个函数:

function shuffleArray(array) {
  for (let i = array.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    // 交换数组元素位置
    [array[i], array[j]] = [array[j], array[i]];
  }
  return array;
}

2. 打乱题目数组

在你获取JSON数据并填充完questionBank之后,调用上面的洗牌函数打乱数组,这样后续遍历数组时拿到的就是随机顺序的题目了。修改$.getJSON的回调代码:

$.getJSON('activity.json', function(data) { 
    for(i=0;i<data.quizlist.length;i++){ 
        questionBank[i]=new Array; 
        questionBank[i][0]=data.quizlist[i].question; 
        questionBank[i][1]=data.quizlist[i].option1; 
        questionBank[i][2]=data.quizlist[i].option2; 
        questionBank[i][3]=data.quizlist[i].option3; 
        questionBank[i][4]=data.quizlist[i].description; 
    } 
    // 新增:打乱questionBank数组,实现题目随机顺序
    questionBank = shuffleArray(questionBank);
    numberOfQuestions=questionBank.length; 
    displayQuestion(); 
})//gtjson

原理说明

原来的代码是按questionNumber从0到numberOfQuestions-1的固定顺序依次取题,现在把questionBank数组打乱后,再按这个顺序遍历,拿到的就是随机排序的题目了,完全不会影响你原来已经实现的选项随机逻辑和答题流程。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:22:36