首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在JavaScript中选择随机但唯一的数组

在JavaScript中选择随机但唯一的数组
EN

Stack Overflow用户
提问于 2018-10-22 00:05:53
回答 3查看 79关注 0票数 0

我正在做一个项目,在这个项目中,我需要创建一个简单的html页面问卷工作。已经8年多了,我没有做过任何编程。现在突然被赋予了一个项目。Stack Overflow帮助我完成了大部分项目。但现在我碰壁了。

我需要从一系列问题中随机选择一个但没有重复的问题。我使用JavaScript来显示问题,并使用此代码示例作为项目的基础。

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>Quiz</title>
<style>

</style>
<script type="text/javascript">

var pos = 0, test, test_status, question, choice, choices, chA, chB, chC, correct = 0, randomq=0;


var questions = [
  ["What is 36 + 42", "64", "78", "76", "B"],
  ["What is 7 x 4?", "21", "27", "28", "C"],
  ["What is 16 / 4?", "4", "6", "3", "A"],
  ["What is 8 x 12?", "88", "112", "96", "C"]
  ];

function get(x){
  return document.getElementById(x);

}


function renderQuestion(){
  test = get("test");


  if(pos >= questions.length){
    test.innerHTML = "<h2>You got "+correct+" of "+questions.length+" questions correct</h2>";
    get("test_status").innerHTML = "Test completed";

    // resets the variable to allow users to restart the test
    pos = 0;
    correct = 0;

    // stops rest of renderQuestion function running when test is completed
    return false;
  }

//打乱问题

代码语言:javascript
复制
  random1 = Math.floor(Math.random() * (questions.length)) ;
   get("test_status").innerHTML = "Question "+(pos+1)+" of "+questions.length;


  question = questions[random1][0];
  chA = questions[random1][1];
  chB = questions[random1][2];
  chC = questions[random1][3];
  test.innerHTML = "<h3>"+question+"</h3>";
  // the += appends to the data we started on the line above
  test.innerHTML += "<input type='radio' name='choices' value='A'> "+chA+"<br>";
  test.innerHTML += "<input type='radio' name='choices' value='B'> "+chB+"<br>";
  test.innerHTML += "<input type='radio' name='choices' value='C'> "+chC+"<br><br>";
  test.innerHTML += "<button onclick='checkAnswer()'>Submit Answer</button>";
}
function checkAnswer(){
  // use getElementsByName because we have an array which it will loop through
  choices = document.getElementsByName("choices");
  for(var i=0; i<choices.length; i++){
    if(choices[i].checked){
      choice = choices[i].value;
    }
  }
  // checks if answer matches the correct choice
  if(choice == questions[random1][4]){
    //each time there is a correct answer this value increases
    correct++;
  }
  // changes position of which character user is on
 pos++;
 // then the renderQuestion function runs again to go to next question
  renderQuestion();
}
window.addEventListener("load", renderQuestion, false);
</script>
</head>
<body>
<h2 id="test_status"></h2>
<div id="test"></div>
</body>
</html>

我正在寻找一种没有重复问题的方法。

请指教..。

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-26 15:21:38

感谢大家的帮助。

我已经找到了解决方案: fisher-yate shuffle

https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle

票数 0
EN

Stack Overflow用户

发布于 2018-10-22 00:11:51

一个肮脏的技巧是创建一个布尔数组,它的大小等于问题的数量。将所有值初始化为false。

然后选择一个随机问题,如果布尔值为false,则将相应的布尔值设置为true。如果它是真的,这意味着它以前被使用过,所以跳过这个问题并移动一个,直到所有的值都为真。

票数 0
EN

Stack Overflow用户

发布于 2018-10-22 08:37:06

为什么不直接把用过的问题拼凑出来呢?

QuestionArr.splice(索引,1):

或者,如果您想保留使用过的问题,请将它们保存在usedQuestions数组中,并在questionArr为空时执行questionArr = ...usedQuestions;usedQuestions = [];

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52917253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档